正如有人說,(並閱讀幾個後約Q.defer()
)我看你解決deferred
變量多次。
如果我明白你正在嘗試做正確的東西,你應該以後解決(其實「 。關於「)外Q.all()
承諾分辨率
//pseudo code
function f2(){
var deferred = Q.defer();
Q.all(chunked.map(f12)).then(function(results){
// Notice prepended 'return' to not break the chain.
return Q.all(results.map(f13)).then(function(){
//f13 returns promise that return value
//deferred.resolve(); // Wrong.
return f13;
});
}).then(function(arr){
deferred.resolve(arr); // <-- This resolves ONCE.
// Of course you don't need to return arr if you doesn't
// care about it. But I think is always better to do things right.
return arr; // Also unnecessary unless you could want to chain
// another .then() to the outer promise.
});
return deferred.promise;
}
f2().then(function(){
console.log("end");
});
希望它可以幫助(當然,未經測試:它まy包含錯誤,但我認爲它解釋了這個概念)。
編輯:我錯過了說(即使你說你知道這是一個反模式),即,至少在你的例子沒有理由使用Q.defer()
,因爲你可以直接返回外Q.all( )承諾......
也許你張貼的內容僅僅是一個簡化版本的更復雜的代碼...
但低於應公開等同行爲,是更簡單:
//pseudo code
function f2(){
return Q.all(chunked.map(f12)).then(function(results){
// Notice prepended 'return' to not break the chain.
return Q.all(results.map(f13)).then(function(){
return f13;
});
})
}
f2().then(function(){
console.log("end");
});
用'deferred.resolve();'解決'f2'函數返回的承諾。 –
是的。我需要在解決所有嵌套的promise後解析f2()。 –
您能否提供運行示例並稍微解釋一下您正在嘗試執行的操作? – bitifet