Обработка ошибок в Promise.allJavascript

Форум по 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.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»