Обработка ошибок в Promise.all ⇐ Javascript
-
Гость
Обработка ошибок в Promise.all
У меня есть массив промисов, который я разрешаю с помощью Promise.all(arrayOfPromises);
Я продолжаю цепочку обещаний. Выглядит примерно так
existingPromiseChain = ExistingPromiseChain.then(function() { var arrayOfPromises = state.routes.map(function(route){ вернуть маршрут.обработчик.promiseHandler(); }); вернуть Promise.all(arrayOfPromises) }); существующийPromiseChain = существующийPromiseChain.then(function(arrayResolved) { // делаем что-то с моим массивом решенных промисов, что в конечном итоге заканчивается res.send(); }); Я хочу добавить оператор catch для обработки отдельного обещания в случае ошибки, но когда я пытаюсь, Promise.all возвращает первую найденную ошибку (остальные игнорируются), а затем я не могу получить данные из остальных промисов в массиве (без ошибок).
Я пробовал сделать что-то вроде ..
existingPromiseChain = ExistingPromiseChain.then(function() { var arrayOfPromises = state.routes.map(function(route){ вернуть маршрут.обработчик.promiseHandler() .then(функция(данные) { возврат данных; }) .catch(функция(ошибка) { вернуть ошибку }); }); вернуть Promise.all(arrayOfPromises) }); существующийPromiseChain = существующийPromiseChain.then(function(arrayResolved) { // делаем что-то с моим массивом решенных промисов, что в конечном итоге заканчивается res.send(); }); Но это не решает проблему.
--
Изменить:
То, что говорилось в ответах ниже, было полностью правдой, код ломался по другим причинам. Если кому-то интересно, это решение, к которому я пришел...
Цепочка серверов Node Express
serverSidePromiseChain .then(function(AppRouter) { var arrayOfPromises = state.routes.map(function(route) { вернуть маршрут.async(); }); Promise.all(arrayOfPromises) .catch(функция(ошибка) { // регистрируем, что у меня ошибка, возвращаем весь массив; console.log('Обещание не удалось выполнить', ошибка); вернуть массивOfPromises; }) .then(function(arrayOfPromises) { // полный массив решенных промисов; }) }; Вызов API (вызов Route.async)
вернуть async() .then(функция(результат) { // отправка успеха вернуть результат; }) .catch(функция(ошибка) { // отправляем отказ и выдаем ошибку выбросить ошибку; }); Размещение .catch для Promise.all перед .then, похоже, послужило цели отловить любые ошибки из исходных обещаний , но затем возвращая весь массив к следующему .then.
У меня есть массив промисов, который я разрешаю с помощью Promise.all(arrayOfPromises);
Я продолжаю цепочку обещаний. Выглядит примерно так
existingPromiseChain = ExistingPromiseChain.then(function() { var arrayOfPromises = state.routes.map(function(route){ вернуть маршрут.обработчик.promiseHandler(); }); вернуть Promise.all(arrayOfPromises) }); существующийPromiseChain = существующийPromiseChain.then(function(arrayResolved) { // делаем что-то с моим массивом решенных промисов, что в конечном итоге заканчивается res.send(); }); Я хочу добавить оператор catch для обработки отдельного обещания в случае ошибки, но когда я пытаюсь, Promise.all возвращает первую найденную ошибку (остальные игнорируются), а затем я не могу получить данные из остальных промисов в массиве (без ошибок).
Я пробовал сделать что-то вроде ..
existingPromiseChain = ExistingPromiseChain.then(function() { var arrayOfPromises = state.routes.map(function(route){ вернуть маршрут.обработчик.promiseHandler() .then(функция(данные) { возврат данных; }) .catch(функция(ошибка) { вернуть ошибку }); }); вернуть Promise.all(arrayOfPromises) }); существующийPromiseChain = существующийPromiseChain.then(function(arrayResolved) { // делаем что-то с моим массивом решенных промисов, что в конечном итоге заканчивается res.send(); }); Но это не решает проблему.
--
Изменить:
То, что говорилось в ответах ниже, было полностью правдой, код ломался по другим причинам. Если кому-то интересно, это решение, к которому я пришел...
Цепочка серверов Node Express
serverSidePromiseChain .then(function(AppRouter) { var arrayOfPromises = state.routes.map(function(route) { вернуть маршрут.async(); }); Promise.all(arrayOfPromises) .catch(функция(ошибка) { // регистрируем, что у меня ошибка, возвращаем весь массив; console.log('Обещание не удалось выполнить', ошибка); вернуть массивOfPromises; }) .then(function(arrayOfPromises) { // полный массив решенных промисов; }) }; Вызов API (вызов Route.async)
вернуть async() .then(функция(результат) { // отправка успеха вернуть результат; }) .catch(функция(ошибка) { // отправляем отказ и выдаем ошибку выбросить ошибку; }); Размещение .catch для Promise.all перед .then, похоже, послужило цели отловить любые ошибки из исходных обещаний , но затем возвращая весь массив к следующему .then.
Мобильная версия