Fehlerbehandlung in Promise.all

Habe ich eine Reihe von Versprechungen, ich bin der Lösung mit Versprechen.alle(arrayOfPromises);

Gehe ich auf weiter das Versprechen Kette. Sieht so ähnlich aus wie diese

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

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

Möchte ich hinzufügen, dass eine catch-Anweisung des Umgangs mit einer Person Versprechen, falls es Fehler, aber wenn ich versuche, Versprechen.alle Rücksendungen die ersten Fehler, die es findet (ignoriert den rest), und dann kann ich nicht die Daten aus dem rest der Versprechungen in das array (nicht-Fehler).

Habe ich versucht, etwas ähnliches ..

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

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

Aber nicht beheben.

Dank!

--

Edit:

Was die Antworten unten gesagt wurden, völlig richtig, der code wurde brechen aus anderen Gründen. Falls es jemanden interessiert, dies ist die Lösung, die ich landete mit ...

Knoten-Express-Server-Kette

serverSidePromiseChain
    .then(function(AppRouter) {
        var arrayOfPromises = state.routes.map(function(route) {
            return route.async();
        });
        Promise.all(arrayOfPromises)
            .catch(function(err) {
                //log that I have an error, return the entire array;
                console.log('A promise failed to resolve', err);
                return arrayOfPromises;
            })
            .then(function(arrayOfPromises) {
                //full array of resolved promises;
            })
    };

API-Aufruf der route.async-Aufruf)

return async()
    .then(function(result) {
        //dispatch a success
        return result;
    })
    .catch(function(err) {
        //dispatch a failure and throw error
        throw err;
    });

Setzen die .fangen Versprechen.alle vor dem .dann scheint Sie diente dem Zweck, die fangen alle Fehler von den ursprünglichen Versprechungen, aber dann wieder das gesamte array an die nächste .dann

Dank!

InformationsquelleAutor der Frage Jon | 2015-05-21

Schreibe einen Kommentar