Saya memiliki berbagai Janji yang saya selesaikan Promise.all(arrayOfPromises);
Saya melanjutkan untuk melanjutkan rantai janji. Terlihat seperti ini
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();
});
Saya ingin menambahkan pernyataan tangkap untuk menangani janji individu jika terjadi kesalahan, tetapi ketika saya mencoba, Promise.all
mengembalikan kesalahan pertama yang ditemukan (mengabaikan sisanya), dan kemudian saya tidak bisa mendapatkan data dari sisa janji di array (itu tidak salah).
Saya sudah mencoba melakukan sesuatu seperti ..
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();
});
Tetapi itu tidak menyelesaikan.
Terima kasih!
-
Edit:
Apa jawaban di bawah ini sepenuhnya benar, kode itu rusak karena alasan lain. Jika ada yang tertarik, ini adalah solusi yang saya akhirnya ...
Rantai Server Node Express
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;
})
};
Panggilan API (panggilan route.async)
return async()
.then(function(result) {
// dispatch a success
return result;
})
.catch(function(err) {
// dispatch a failure and throw error
throw err;
});
Menempatkan .catch
untuk Promise.all
sebelum .then
tampaknya telah melayani tujuan menangkap kesalahan dari janji asli, tetapi kemudian mengembalikan seluruh array ke yang berikutnya.then
Terima kasih!
.then(function(data) { return data; })
dapat sepenuhnya dihapus
then
atau catch
penangan dan ada kesalahan yang terjadi. Omong-omong, apakah simpul ini?