Mam szereg obietnic, które realizuję Promise.all(arrayOfPromises);
Kontynuuję, aby kontynuować łańcuch obietnic. Wygląda mniej więcej tak
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();
});
Chcę dodać instrukcję catch, aby obsłużyć indywidualną obietnicę na wypadek błędu, ale gdy spróbuję, Promise.all
zwraca pierwszy znaleziony błąd (ignoruje resztę), a następnie nie mogę uzyskać danych z pozostałych obietnic w tablica (to nie błąd).
Próbowałem zrobić coś takiego ...
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();
});
Ale to nie rozwiązuje problemu.
Dzięki!
-
Edytować:
Poniższe odpowiedzi były całkowicie prawdziwe, kod łamał się z innych powodów. Jeśli ktoś jest zainteresowany, oto rozwiązanie, w którym znalazłem ...
Łańcuch Node Express Server
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;
})
};
Wywołanie API (wywołanie route.async)
return async()
.then(function(result) {
// dispatch a success
return result;
})
.catch(function(err) {
// dispatch a failure and throw error
throw err;
});
Uruchamianie systemu .catch
za Promise.all
zanim .then
Wydaje się, że służył łapania błędów od pierwotnych obietnic, ale potem wraca całą tablicę do następnego.then
Dzięki!
.then(function(data) { return data; })
można całkowicie pominąć
then
lub catch
handlerach i jest w nim błąd. Nawiasem mówiąc, czy ten węzeł?