Heim  >  Artikel  >  Web-Frontend  >  Wie gehe ich mit einzelnen Fehlern in Promise.all um und greife auf nicht betroffene Promise-Daten zu?

Wie gehe ich mit einzelnen Fehlern in Promise.all um und greife auf nicht betroffene Promise-Daten zu?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-29 18:29:50878Durchsuche

How to Handle Individual Errors in Promise.all and Access Unaffected Promise Data?

Fehler in Promise.all abfangen

Problem:

Bei der Verwendung von Promise.all Wenn Sie eine Reihe von Versprechungen verarbeiten, ist das Erkennen einzelner Versprechungsfehler eine Herausforderung, da Promise.all den ersten aufgetretenen Fehler zurückgibt und den Rest ignoriert. Folglich sind Daten aus nicht betroffenen Versprechen im Array nicht mehr zugänglich.

Lösung:

Das inhärente Verhalten von Promise.all besteht darin, ein Array aufgelöster Werte zurückzugeben oder mit abzulehnen ein einzelner Fehler bei Ablehnung eines Mitgliedsversprechens.

Sie können Ihren Code jedoch wie folgt ändern, um einzelne Fehler zu behandeln und dennoch Werte aus erfolgreichen Versprechen zu erhalten:

existingPromiseChain = existingPromiseChain.then(function() {
  var arrayOfPromises = state.routes.map(function(route) {
    return route.handler.promiseHandler()
      .then(function(data) {
        return data;
      })
      .catch(function(err) {
        return { error: err };
      });
  });
  return Promise.all(arrayOfPromises);
});

existingPromiseChain = existingPromiseChain.then(function(arrayResolved) {
  // do stuff with my array of resolved promises (values or error objects), eventually ending with a res.send();
});

Erklärung :

Indem Sie Fehler einzeln abfangen und Fehlerobjekte zurückgeben, ermöglichen Sie Promise.all die Auflösung mit einem Array, das sowohl aufgelöste Werte als auch Fehlerobjekte enthält. Ihr nachfolgender then()-Block kann dieses gemischte Array dann entsprechend verarbeiten.

Das obige ist der detaillierte Inhalt vonWie gehe ich mit einzelnen Fehlern in Promise.all um und greife auf nicht betroffene Promise-Daten zu?. 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