“Promise.all 返回一个未定义的数组并在被解析之前解析完毕。”当使用 Promise.all() 的函数返回未定义值的数组时,会出现此问题,在数组中的所有 Promise 都得到满足之前提前解决。
在 Promises 中,Promise.all( ) 需要一个 Promise 对象数组。这里创建了一个未定义值数组,因为addText函数中的map回调缺少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语句,map回调会返回一个未定义值数组,触发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中文网其他相关文章!