Heim >Web-Frontend >js-Tutorial >Warum wird Promise.all mit undefinierten Werten aufgelöst?

Warum wird Promise.all mit undefinierten Werten aufgelöst?

Linda Hamilton
Linda HamiltonOriginal
2024-10-31 09:10:02433Durchsuche

Why Does Promise.all Resolve with Undefined Values?

Promise.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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn