「Promise.all は未定義の配列を返しており、定義される前に解決されます」終わり。"この問題は、Promise.all() を利用する関数が未定義の値の配列を返し、配列内のすべての Promise が満たされる前に途中で解決される場合に発生します。
Promise では、Promise.all( ) は、Promise オブジェクトの配列を期待します。 addText 関数のマップ コールバックには Promise の戻り値がないため、ここで未定義の値の配列が作成されます。
<code class="js">function addText(queries) { return Promise.all(queries.map(function(query) { // Insert a `return` statement here. models.queries .findById(query.queryId, { raw: true, attributes: ["query"], }) .then(function(queryFetched) { query.text = queryFetched.query; console.log(query); return Promise.resolve(query); }, function(error) { return Promise.reject(error); }); })); };</code>
return ステートメントがないと、マップ コールバックは未定義の値の配列を返し、Promise の解決をトリガーします。クエリがまだ完了していないにもかかわらず、.all() を途中で実行します。
コードを return ステートメントで囲むことにより、各マップ コールバックが Promise を返すようにします。
<code class="js">function addText(queries) { return Promise.all(queries.map(function(query) { return models.queries .findById(query.queryId, { raw: true, attributes: ["query"], }) .then(function(queryFetched) { query.text = queryFetched.query; console.log(query); return Promise.resolve(query); }, function(error) { return Promise.reject(error); }); })); };</code>
そうすることで、Promise.all() は配列内のすべての Promise が解決されるまで待ってからそれ自体を解決し、プロセス全体が正常に完了するようにします。
以上がPromise.all() が未定義の値の配列で途中で解決されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。