Heim >Web-Frontend >js-Tutorial >Polyfills von Promise.all()

Polyfills von Promise.all()

Linda Hamilton
Linda HamiltonOriginal
2024-10-22 20:43:02438Durchsuche

Polyfills of Promise.all()

Funktion von Promise.all()

Eingabe: Es braucht eine Reihe von Versprechen (nicht notwendig)
Ausgabe: Es wird ein Versprechen zurückgegeben, das eine Reihe von Ergebnissen aller Erfolgsversprechen enthält.
Hinweis: Wenn ein Versprechen fehlschlägt, wird es sofort abgelehnt.

Code für Promise.myAll()

`
Promise.myAll = Funktion (Versprechen) {
neues Versprechen zurückgeben (Funktion (auflösen, ablehnen) {
// Überprüfen Sie, ob die Eingabe ein Array ist
if (!Array.isArray(promises)) {
Return Reject(new TypeError("Argument muss ein Array sein"));
}

let results = [];
let completedPromises = 0;

promises.forEach(function (promise, index) {
  // Use Promise.resolve to handle non-promise values
  Promise.resolve(promise)
    .then(function (value) {
      results[index] = value;
      completedPromises += 1;

      // If all promises are resolved
      if (completedPromises === promises.length) {
        resolve(results);
      }
    })
    .catch(function (error) {
      reject(error); // Reject if any promise fails
    });
});

// Handle case with empty array of promises
if (promises.length === 0) {
  resolve([]);
}

});
};
`

1. Wenn alle Versprechen erfolgreich gelöst wurden

. Alle Versprechen werden aufgelöst und ihre Ergebnisse werden im Ergebnisarray gespeichert.
. Wenn die Anzahl der aufgelösten Versprechen der Länge des Eingabearrays entspricht, wird das äußere Versprechen mit dem Ergebnisarray aufgelöst.

2. Warum Promise.resolve() verwenden?

. Es ist nicht notwendig, dass in einer Reihe von Versprechen jeder Wert ein Versprechen sein muss, er kann ein beliebiger Wert sein – eine Zahl, eine Zeichenfolge oder eine beliebige synchrone Funktion.

  1. Wenn der übergebene Wert bereits ein Versprechen ist, wird das gleiche Versprechen zurückgegeben, um sicherzustellen, dass kein zusätzlicher Umbruch oder keine Änderung erfolgt.

  2. Wenn der übergebene Wert kein Versprechen ist, wird der Wert in ein aufgelöstes Versprechen verpackt, sodass er wie ein Versprechen behandelt und mit .then() behandelt werden kann

3. Warum Promise.resolve(), warum nicht Promise.reject()

damit es mit dem Wert aufgelöst wird. Wenn wir „Reject“ verwenden, wird es im Catch-Block abgefangen und der Wert wird als Fehler betrachtet.

4. Was passiert, wenn ein Versprechen fehlschlägt?

  1. Dies löst den Reject()-Aufruf des äußeren Versprechens aus, wodurch Promise.myAll() sofort abgelehnt wird.
  2. foreach-Schleife wird fortgesetzt, während das Programm synchronisiert wird
  3. Der Rest des Versprechens wird aufgelöst und sein Wert wird dem Ergebnis hinzugefügt, aber als abgeschlossenes Promise!=promises.length wird es nicht aufgelöst, und wenn es trotzdem versucht wird, wird es ignoriert, da sich Promise.myAll() jetzt nicht im Status „Ausstehend“ befindet.

Wenn Sie noch Fragen haben, stellen Sie diese gerne in den Kommentaren!

Das obige ist der detaillierte Inhalt vonPolyfills von Promise.all(). 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