Heim > Web-Frontend > js-Tutorial > Warum wird Promise.all() bei einem Array undefinierter Werte vorzeitig aufgelöst?

Warum wird Promise.all() bei einem Array undefinierter Werte vorzeitig aufgelöst?

DDD
Freigeben: 2024-10-31 08:51:30
Original
378 Leute haben es durchsucht

Why Does Promise.all() Resolve Prematurely with an Array of Undefined Values?

Promise.all() vorzeitig mit Array von Undefinierten lösen

Problem

"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.

Erklärung

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>
Nach dem Login kopieren

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.

Lösung

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage