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中文網其他相關文章!