forループ内で解決するPromiseを含む関数foo()があります。私はfoo()を数回実行して、毎回異なる引数を与えたい。それから、私はそのすべての結果で何かをしたい。 Promise.all()はforループの最後で実行されるか、またはfoo()内部のすべての約束が返された後で実行されますか?あるいは、「これらのfoo()のどれもが約束ではない」と言うでしょうか?そして私を笑う?forループで作成したPromisesの後にPromise.all()を使用する方法
var foo = (x) => {
for (var i = 0; i < 100; i++) {
someOtherFunctionThatReturnsAPromise(x).then(returnSomething());
}
};
function nowDoEverything() {
return Promise.all([foo(1), foo(2), foo(3)]).then(doSomethingWithAllThoseReturnedValues());
}
nowDoEverything();
プロミスを返す必要はありますか?もしそうなら、私はfoo()内部の約束事がforループの内部で生成されるので、どうすればよいのでしょうか?
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise/allは は「Promise.all(反復可能)メソッドは、反復可能な引数での約束がすべて解決されていたときに解決する約束を返す、または拒否する最初に渡さ約束の理由で拒否します。」と述べています
このビデオhttps://www.youtube.com/watch?v=RRgAdi3gX-sは基本的な約束を説明するのに本当に良いですが、私は建築家が意図していない/期待していることをしようとしているようです。
よかった、ありがとう!省略記号(... foo(1))とは何ですか? –
@GlenPierce '...'句読点は、用途に応じて要素を広げたり、残りの要素にすることができます。[ECMAScriptのドキュメントのSpreadElementとは? MDNのSpread演算子と同じですか?](http://stackoverflow.com/questions/37151966/what-is-spreadelement-in-ecmascript-documentation-is-it-the-same-as-spread-oper) 。展開要素がなければ、3つの配列が存在するか、またはN倍の 'foo'配列が配列の代わりに' Promises.all() 'から' .then() 'に渡されます。 Promise.all([[1,2,3]、[4,5,6]])then(data => console.log(data)); Promise.all([... [1,2,3]、... [4,5,6]])。then(data => console.log(data)) '。 – guest271314