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
Susan SarandonOriginal
2024-11-24 13:18:111033Durchsuche

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();
}

Verwenden Reduzieren:

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

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());
}

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;
}

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;
}

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!

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