[英]Using forEach to sequentially execute functions in Q
我正在嘗試使用他們的第一個序列策略來運行基於Q
API的一系列函數。 這表明了這種模式:
var funcs = [foo, bar, baz, qux];
var result = Q(initialVal);
funcs.forEach(function (f) {
result = result.then(f);
});
return result;
數組中每個函數的結構是什么? 關於何時使用return def.promise;
我很困惑return def.promise;
。 那簡直就是最后一行嗎? 是經常還是總是緊跟def.resolve(someVar)
。 這樣的事情結束了嗎?
function foo(f){
var def = Q.defer();
f++;
def.resolve(f);
return def.promise;
}
這樣,數組中的每個后續函數都將接收新計算的f
值:在這種情況下,如果var initialVal = 1;
和四個函數每個遞增f++
,返回的結果將是4
? 如何訪問返回的值? console.log(result)
打印{ state: 'pending' }
。
數組中每個函數的結構是什么?
Q.js允許以多種方式創建承諾。 例如 :
function foo(value) {
var def = Q.defer();
def.resolve(value + 1);
return def.promise;
}
function foo(value) {
return Q(value + 1);
}
function foo(value) {
return Q.Promise(function(resolve, reject) {
resolve(value + 1);
});
}
其他Promise庫類似,但不一定非常靈活。 原生js Promises必須使用這些方法中的第三種來構建。
但是,在現實世界中,您很少需要創建自己的Promise。 您通常會處理其他人編寫的promise-returns lib方法。 例如 :
function foo(value) {
return lib.doSomethingAsync(value, and, other, params);
}
如何訪問返回的值?
如果成員名稱“result”替換為“promise”,則代碼更容易理解,而result.then(f)
則使用調用f()
的匿名函數重寫。
function performAsyncSequence() {
var promise = Q(initialVal);
funcs.forEach(function (f) {
promise = promise.then(function(previousResult) {
return f(previousResult);
});
});
return promise;
}
這100%等同於問題中的代碼,但現在應該更清楚地知道先前的結果如何沿着promise鏈傳遞。
在序列中訪問所有先前的承諾結果更復雜。 這里的答案全面地討論了這個主題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.