私は青い鳥を使用して約束にまで読んでいると、次のことを達成しようとしている:連鎖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に格納されます。どのようにしてこれらの3つを連鎖/縮約してループ内で他のものを実行し、func3を約束だけで実行することができますか?
乾杯。
ですが配列を順番に処理しようとしています(つまり、arの最初の項目を処理します最初の処理が完了するまで、2番目の処理を開始しないでください)。または、すべてが完了したときに知っている限り、すべてを並行して処理することでOKですか?あなたの質問は、両方のビットを示すようだとあなたは並列で配列全体を実行する答えを選択したと私はあなたが実際に何を求めているか分からなかった。 – jfriend00
まあ実際には並行しても問題ありませんが、私の現在の質問には影響しませんが、インデックス0からインデックス4(私の場合)まで順番にこれを行う方法はありますか? – Neophile
はい、それを順番に行う方法があります。この質問は、人々がそれを一方向に答えることができるように、一方または他方である必要があります。あなたはすでに物事を並行して行う答えを受け入れています。パラレルが論理的にOKで、ターゲットサーバを圧倒しない場合(またはトリガーレート制限がある場合)、パラレルはすべての処理を完了するのが通常より速いのでより優れています。 – jfriend00