Ich habe eine Reihe von Versprechungen, mit denen ich löse Promise.all(arrayOfPromises);
Ich setze die Versprechen-Kette fort. Sieht ungefähr so aus
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();
});
Ich möchte eine catch-Anweisung hinzufügen, um ein einzelnes Versprechen zu behandeln, falls es fehlerhaft ist. Wenn ich es jedoch versuche, wird Promise.all
der erste gefundene Fehler zurückgegeben (der Rest wird ignoriert), und dann kann ich die Daten aus dem Rest der Versprechen in nicht abrufen das Array (das hat keinen Fehler gemacht).
Ich habe versucht, so etwas wie ..
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();
});
Das lässt sich aber nicht lösen.
Vielen Dank!
- -
Bearbeiten:
Was die folgenden Antworten sagten, war völlig richtig, der Code brach aus anderen Gründen. Falls jemand interessiert ist, ist dies die Lösung, die ich gefunden habe ...
Node Express-Serverkette
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 (route.async-Aufruf)
return async()
.then(function(result) {
// dispatch a success
return result;
})
.catch(function(err) {
// dispatch a failure and throw error
throw err;
});
Das Setzen des .catch
for Promise.all
vor das .then
scheint den Zweck erfüllt zu haben, Fehler aus den ursprünglichen Versprechungen abzufangen, aber dann das gesamte Array zum nächsten zurückzukehren.then
Vielen Dank!
.then(function(data) { return data; })
kann komplett weggelassen werden
then
oder catch
Handlern anzeigen und ein Fehler darin ausgelöst wird. Ist das übrigens dieser Knoten?