"Promise.all gibt ein Array von Undefinierten zurück und wird aufgelöst, bevor es auftritt Erledigt." Dieses Problem tritt auf, wenn eine Funktion, die Promise.all() verwendet, ein Array undefinierter Werte zurückgibt und vorzeitig aufgelöst wird, bevor alle Versprechen innerhalb des Arrays erfüllt sind.
In Promises gibt Promise.all( ) erwartet ein Array von Promise-Objekten. Hier wird ein Array undefinierter Werte erstellt, da dem Map-Callback in der addText-Funktion Promise-Rückgaben fehlen.
<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>
Ohne die Return-Anweisung gibt der Map-Callback ein Array undefinierter Werte zurück, was die Auflösung von Promise auslöst .all() vorzeitig, auch wenn die Abfragen noch nicht abgeschlossen sind.
Stellen Sie sicher, dass jeder Kartenrückruf ein Versprechen zurückgibt, indem Sie den Code in Rückgabeanweisungen einschließen.
<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>
Auf diese Weise wartet Promise.all() auf die Auflösung aller Versprechen innerhalb des Arrays, bevor es sich selbst auflöst, und stellt so sicher, dass der gesamte Prozess erfolgreich abgeschlossen wird.
Das obige ist der detaillierte Inhalt vonWarum wird Promise.all() bei einem Array undefinierter Werte vorzeitig aufgelöst?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!