如何同步一系列承諾?我有一個承諾對象數組,這些對象必須按照數組中列出的相同順序進行解析,也就是說,在解析完前一個元素(作為方法)之前,我們不能嘗試解析一個元素。Promise.all([...]))。如果一個元素被拒絕,我需要鏈立即拒絕,而不試圖解析以下元素。我如何實現這一點,或者是否存在這樣的現有實現?sequence模式?function sequence(arr) {
return new Promise(function (resolve, reject) {
// try resolving all elements in 'arr',
// but strictly one after another;
});}編輯最初的答案表明我們只能sequence這種數組元素的結果,而不是它們的執行,因為它是在這樣的示例中預先定義的。但是,如何產生一系列的承諾,以避免早期執行呢?下面是一個修改過的示例:function sequence(nextPromise) {
// while nextPromise() creates and returns another promise,
// continue resolving it;}我不想把它變成一個單獨的問題,因為我認為這是同一個問題的一部分。解下面的一些答案和隨后的討論有點誤入歧途,但最終的解決方案,正是我所尋求的,是在內部實現的。斯皮克斯圖書館,作為方法序列..該方法可以遍歷動態長度序列,并根據應用程序的業務邏輯創建承諾。后來,我把它變成了一個共享庫,供大家使用。
3 回答

萬千封印
TA貢獻1891條經驗 獲得超3個贊
.each

Smart貓小萌
TA貢獻1911條經驗 獲得超7個贊
doSomethingAsync().then(function(){ doSomethingAsync2().then(function(){ doSomethingAsync3(); ....... });});
編輯
var callbackArr = [];var promiseArr = [];promiseArr.push(doSomethingAsync()); callbackArr.push(doSomethingAsyncCallback);promiseArr.push(doSomethingAsync1()); callbackArr.push(doSomethingAsync1Callback);.........promiseArr.push(doSomethingAsyncN()); callbackArr.push(doSomethingAsyncNCallback);
$.when(promiseArr).done(function(promise){ while(callbackArr.length > 0) { callbackArr.pop()(promise); }});
- 3 回答
- 0 關注
- 373 瀏覽
添加回答
舉報
0/150
提交
取消