Tôi có một loạt các Lời hứa mà tôi đang giải quyết Promise.all(arrayOfPromises);
Tôi tiếp tục chuỗi tiếp tục hứa hẹn. Trông giống như thế này
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();
});
Tôi muốn thêm một câu lệnh bắt để xử lý một lời hứa riêng lẻ trong trường hợp nó bị lỗi, nhưng khi tôi thử, Promise.all
sẽ trả về lỗi đầu tiên mà nó tìm thấy (bỏ qua phần còn lại), và sau đó tôi không thể lấy dữ liệu từ phần còn lại của các lời hứa trong mảng (không có lỗi).
Tôi đã thử làm một cái gì đó như ..
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();
});
Nhưng điều đó không giải quyết.
Cảm ơn!
-
Biên tập:
Những gì các câu trả lời dưới đây đã nói là hoàn toàn đúng, mã bị phá vỡ do các lý do khác. Trong trường hợp bất cứ ai quan tâm, đây là giải pháp tôi đã kết thúc với ...
Chuỗi máy chủ 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;
})
};
Cuộc gọi API (cuộc gọi route.async)
return async()
.then(function(result) {
// dispatch a success
return result;
})
.catch(function(err) {
// dispatch a failure and throw error
throw err;
});
Đặt .catch
for Promise.all
trước .then
dường như đã phục vụ mục đích bắt bất kỳ lỗi nào từ các lời hứa ban đầu, nhưng sau đó trả lại toàn bộ mảng cho tiếp theo.then
Cảm ơn!
.then(function(data) { return data; })
có thể được bỏ qua hoàn toàn
then
hoặc catch
có lỗi bị ném vào bên trong. Nhân tiện, đây là nút?