我一直在使用藍鳥承諾閱讀並一直在努力實現以下目標:鏈接的JavaScript承諾在一個循環 - 藍鳥
我需要直到循環結束運行FUNC1和FUNC2。一旦完成,我想運行func3。代碼如下:
注:所有功能有一個回調函數(表明該操作已成功完成)
var jsObj = ["1", "2", "3", "4", "5"]; // has 5 elements
for (var i = 0; i < jsObj.length; i++) {
var arr1 = [];
arr1 = jsObj[i];
func1(arr1).then(function(returnVal1) {
// finished func1
func2(returnVal1).then(function(returnVal2) {
// finished func2
});
});
} // end of loop
// Now, I need to run the last function once the loop is complete
var data = ["1222"];
func3(data, function() {
alert("all done");
});
FUNC1和FUNC2使用承諾完成從而返回的結果在回調函數變量returnVal1和returnVal2中。我怎樣才能將這三者連鎖/壓縮在一起,讓一個人在一個循環中運行,然後使用promise來運行func3?
乾杯。
是你試圖按順序處理數組(所以你處理ar中的第一項並且在第一次完成之前不要開始處理第二個)?或者,您可以並行處理所有內容(一次運行所有內容),只要您知道何時完成所有事情?你的問題似乎表明了一點,你已經選擇了一個平行運行整個陣列的答案,我不確定這就是你實際要求的。 – jfriend00
那麼實際上平行就可以了,它並不影響我在我當前的問題,但有沒有辦法做到這一點順序,即從索引0開始索引4(在我的情況)? – Neophile
是的,有一種方法可以順序執行。這個問題必須是一個或另一個,所以人們可以單向回答。你已經接受了一個並行處理的答案。如果邏輯上並行並行,並且不會壓倒目標服務器(或觸發速率限制),那麼並行會更好,因爲完成所有操作通常更快。 – jfriend00