Heim  >  Artikel  >  Web-Frontend  >  Wie kann man eine Folge von Promises in JavaScript synchronisieren?

Wie kann man eine Folge von Promises in JavaScript synchronisieren?

DDD
DDDOriginal
2024-11-08 12:54:01597Durchsuche

How can you synchronize a sequence of Promises in JavaScript?

Synchronisieren einer Folge von Versprechen

JavaScript-Versprechen bieten einen leistungsstarken Mechanismus für die Handhabung asynchroner Vorgänge. Es gibt jedoch Situationen, in denen wir die Ausführung von Versprechen in einer bestimmten Reihenfolge synchronisieren müssen. Dies stellt eine besondere Herausforderung dar, wenn wir eine vorzeitige Ausführung oder Unterbrechungen durch spätere Versprechen vermeiden möchten.

Manuelle Iteration mit Promise Chaining

Ein einfacher Ansatz zum Synchronisieren von Versprechen ist das Durchlaufen Sie manuell und verketten Versprechen nacheinander:

function sequence(arr) {
  let index = 0;

  function next() {
    if (index < arr.length) {
      return arr[index++].then(next).catch(e => Promise.reject(e));
    }
  }

  return next();
}

Diese Funktion durchläuft die Reihe von Versprechen, löst sie nacheinander auf und bearbeitet alle Ablehnungen.

Verwendung der Bluebird Promise Library

Bluebird ist eine beliebte Promise-Bibliothek, die zusätzliche Funktionen für die Parallelitätskontrolle bietet, darunter:

Promise.mapSeries(arr, function(item) {
  return processItem(item);
}).then(function(results) {
  // process final results here
}).catch(function(err) {
  // process array here
});

Verwendung von ES7 Async/Await

ES7 hat die Async/Await-Syntax eingeführt, die die asynchrone Programmierung vereinfacht und eine natürliche Möglichkeit zum Sequenzieren von Versprechen bietet:

async function processArray(array, fn) {
  let results = [];
  for (let i = 0; i < array.length; i++) {
    let r = await fn(array[i]);
    results.push(r);
  }
  return results;    // will be resolved value of promise
}

Vermeidung einer frühen Ausführung

Um eine vorzeitige Ausführung von zu verhindern Versprechen können Sie innerhalb der Schleife erstellen, anstatt sie im Voraus zu deklarieren. Dadurch wird sichergestellt, dass nur das aktuelle Versprechen ausgeführt wird, bevor das nächste erstellt wird.

function sequenceDynamic(nextPromise) {
  let index = 0;

  function next() {
    const promise = nextPromise(index);
    if (promise) {
      return promise.then(() => next(++index)).catch(e => Promise.reject(e));
    }
  }

  return next();
}

Diese aktualisierte Funktion verwendet eine Rückruffunktion, die das nächste auszuführende Versprechen zurückgibt. Die Funktion iteriert weiter, solange der Rückruf gültige Versprechen zurückgibt.

Fazit

Das Synchronisieren von Versprechen in einer bestimmten Reihenfolge kann durch manuelle Iteration, die Bluebird-Bibliothek, asynchron erreicht werden /await-Syntax oder durch Vermeidung einer frühen Ausführung. Es ist wichtig, den Ansatz auszuwählen, der am besten zu Ihrer Anwendungs- und Entwicklungsumgebung passt.

Das obige ist der detaillierte Inhalt vonWie kann man eine Folge von Promises in JavaScript synchronisieren?. 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