Promise.all gibt ein undefiniertes Array zurück und löst es vorzeitig auf
Promise.all ist so konzipiert, dass es ein Array von Promise-Objekten akzeptiert und einmal alle auflöst Die Promises im Array wurden aufgelöst. Im bereitgestellten Code tritt das Problem jedoch auf, weil die an die Karte von Promise.all übergebene Rückruffunktion kein Promise zurückgibt.
Innerhalb der addText-Funktion:
<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>
Hier ist, was passiert :
Um dieses Problem zu beheben und sicherzustellen, dass Promise.all erst nach allen Versprechen im Rückruf aufgelöst wird gelöst wurden, muss der Callback explizit Promises zurückgeben:
<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>
Jetzt gibt der Map-Callback Promises zurück, die Promise.all erst dann ordnungsgemäß verarbeiten und auflösen kann, wenn alle Promises aufgelöst wurden.
Das obige ist der detaillierte Inhalt vonWarum gibt Promise.all ein undefiniertes Array zurück und wird vorzeitig aufgelöst?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!