Heim > Web-Frontend > js-Tutorial > Wie führt man eine Reihe von Versprechen in der richtigen Reihenfolge aus und behandelt Ablehnungen?

Wie führt man eine Reihe von Versprechen in der richtigen Reihenfolge aus und behandelt Ablehnungen?

Susan Sarandon
Freigeben: 2024-11-24 13:18:11
Original
1039 Leute haben es durchsucht

How to Execute a Sequence of Promises in Order and Handle Rejections?

So synchronisieren Sie eine Folge von Versprechen

In diesem Szenario müssen Sie sicherstellen, dass:

  • Versprechen werden auf die gleiche Weise gelöst Reihenfolge, in der sie im Array aufgelistet werden.
  • Wenn ein Element abgelehnt wird, sollte die gesamte Sequenz abgelehnt werden ablehnen.

Obwohl es hierfür keine direkte integrierte Lösung gibt, gibt es folgende Möglichkeiten, dieses Verhalten zu erreichen:

Manuelle Iteration mithilfe von Rekursion:

function sequence(arr) {
  const index = 0;

  function next() {
    if (index < arr.length) {
      arr[index]().then(next).catch(reject);
      index++;
    }
  }
  next();
}
Nach dem Login kopieren

Verwenden Reduzieren:

function sequence(arr) {
  return arr.reduce((p, item) => {
    return p.then(() => item()); // Assuming each element is a promise-returning function
  }, Promise.resolve());
}
Nach dem Login kopieren

Verwendung von Promise.mapSeries:

Wenn Sie die Bluebird Promise-Bibliothek verwenden, können Sie deren Promise.mapSeries-Methode verwenden:

function sequence(arr) {
  return Promise.mapSeries(arr, item => item());
}
Nach dem Login kopieren

Mit ES7 Async/Await:

Falls unterstützt, können Sie async/await verwenden, um dies zu erreichen:

async function sequence(arr) {
  const results = [];
  for (let item of arr) {
    results.push(await item());
  }
  return results;
}
Nach dem Login kopieren

Spex-Bibliothek verwenden:

Die Spex-Bibliothek bietet eine Sequenzmethode, mit der Sie über eine dynamische Sequenz iterieren können verspricht:

import { sequence } from 'spex';

function sequence(nextPromise) {
  // while nextPromise() creates and returns another promise, continue resolving it;
}
Nach dem Login kopieren

Denken Sie daran, wenn ein Element im Array abgelehnt wird, wird die Sequenz abgelehnt, sobald diese Ablehnung auftritt. Dieses Verhalten stellt sicher, dass keine weiteren Elemente verarbeitet werden.

Das obige ist der detaillierte Inhalt vonWie führt man eine Reihe von Versprechen in der richtigen Reihenfolge aus und behandelt Ablehnungen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage