Promise.all 返回未定义的数组并提前解析
Promise.all 旨在接受 Promise 对象数组并在所有 Promise 对象后解析数组中的 Promise 已解决。然而,在提供的代码中,出现了问题,因为传递给 Promise.all 的映射的回调函数没有返回 Promise。
在 addText 函数中:
<code class="javascript">function addText(queries) { return Promise.all(queries.map(function(query) { // Missing `return` statement causes undefined values in the array models.queries .findById(query.queryId, { raw: true, attributes: [ "query" ] }) .then(function(queryFetched) { query.text = queryFetched.query; console.log(query); // Return the updated query as a resolved Promise return Promise.resolve(query); }, function(error) { // Return the error as a rejected Promise return Promise.reject(error); }); })); };</code>
以下是发生的情况:
要解决此问题并确保 Promise.all 仅在回调中的所有 Promise 后解析已解决,回调必须显式返回 Promises:
<code class="javascript">function addText(queries) { return Promise.all(queries.map(function(query) { // Added `return` statement to wrap the Promise in the callback 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>
现在,map 回调返回 Promises,只有在所有 Promise 都已解决后,Promise.all 才能正确处理和解决。
以上是为什么 Promise.all 返回未定义的数组并过早解析?的详细内容。更多信息请关注PHP中文网其他相关文章!