Warum wird Promise.all mit undefinierten Werten aufgelöst?
Oct 31, 2024 am 09:10 AMPromise.all frühzeitig auflösen: Undefinierte Arrays vermeiden
Übersicht
Promise.all ist ein leistungsstarkes Tool zum gleichzeitigen Ausführen mehrerer asynchroner Vorgänge und deren Aggregierung Ergebnisse. Bei unsachgemäßer Anwendung kann es jedoch zu unerwartetem Verhalten kommen, z. B. zur Auflösung mit einem Array undefinierter Werte.
Problem
Bedenken Sie den angegebenen Code:
classMethods.getQueries = function(models, dbId, dateStart, dateEnd) { return new Promise(function(resolve, reject) { ... then(addText, reject) .then(function(queries) { console.log("getQueries finished", queries); // Array of 10× undefined! resolve(queries); }, reject); }); };
Hier gibt die Funktion addText ein Promise.all mit undefinierten Werten zurück, bevor eines der einzelnen Versprechen im Map-Callback aufgelöst wird. Dies führt dazu, dass getQueries mit einem Array undefinierter Werte aufgelöst werden.
Lösung
Zur Auflösung, nachdem alle Versprechen erfüllt sind, geben Sie das Versprechen von jedem Kartenrückruf zurück:
function addText(queries) { return Promise.all(queries.map(function(query) { // Return the promise to delay resolution until the operation succeeds/fails. 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); }); })); };
Vermeiden Nicht definiert in Promise.all
Denken Sie daran, dass Promise.all ein Array von Promise-Objekten akzeptiert. Undefinierte Werte werden sofort aufgelöst, was möglicherweise zu einer vorzeitigen Auflösung führt. Geben Sie immer das Versprechen jeder einzelnen Operation zurück, um eine korrekte Ergebnisauswahl zu gewährleisten.
Das obige ist der detaillierte Inhalt vonWarum wird Promise.all mit undefinierten Werten aufgelöst?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heißer Artikel

Hot-Tools-Tags

Heißer Artikel

Heiße Artikel -Tags

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Ersetzen Sie Stringzeichen in JavaScript

JQuery überprüfen, ob das Datum gültig ist

Benutzerdefinierte Google -Search -API -Setup -Tutorial

HTTP-Debugging mit Knoten und HTTP-Konsole

JQuery fügen Sie Scrollbar zu Div hinzu
