promise.all()
を使用してループの後に関数のリストを同期して実行しようとしていますが、コードが期待通りに機能しません。ノードpromises.all()が正常に動作しません
誰かが私が間違っていたことを知っていますか?
私のコードは次のとおりです。私は
push promise 0
push promise 1
push promise 2
---> foo i 0
---> foo i 1
---> foo i 2
done
を期待するところ
var Promise = require('promise');
var promises = [];
for (var i = 0; i < 3; i++) {
console.log('push promise ' + i);
promises.push(foo(i));
}
Promise.all(promises)
.then(function (data) {
console.log("done");
});
function foo(i) {
return new Promise(function (resolve, reject) {
console.log('---> foo i ' + i);
resolve('done foo ' + i);
});
}
が、出力は
push promise 0
---> foo i 0
push promise 1
---> foo i 1
push promise 2
---> foo i 2
done
で事前にありがとうございます。
すべての約束は、作成されたときの解決を開始します。 'Promise.all'を呼び出すと、引数がすべて解決されたときに解決する別の約束事が作成されます。コンストラクタ関数には非同期動作がないことに注意してください。 [setTimeout(...、0)](https://stackoverflow.com/questions/1360238/myfunction-vs-window-settimeoutmyfunction-0)を使用して、期待する実行順序を達成することができます。 – allonhadaya