Как обрабатывать ошибки из нескольких затем в ловушке обещаний JavaScript?

1

пусть p будет обещанием, которое мы можем сделать

p
.then(f1)
.then(f2)
.then(f3)
.catch(f4)

теперь в catch, ошибка может быть выбрана из любого из f1, f2, f3 или даже p отклоненных

теперь какой должен быть правильный способ обработки ошибок в f4 (или в catch), так как ошибки, вышеперечисленные, могут быть разных типов, могут несколько, если в f4 избежать?

Теги:
ecmascript-6
error-handling
promise
bluebird

2 ответа

2

Вы можете определить собственную пользовательскую ошибку. Например:

function CustomError(errorText){
    this.error = errorText;
}

Измените свои функции. Добавить блок catch для каждого обещания, возвращаемого функцией:

function p(){
    return new Promise(function(resolve, reject){ 
            //Your functionality here
         })
          .catch(function(error){
             Promise.reject(new CustomError('f1')));
         })
}

И так далее: f2, f3, f4

И ваш блок catch будет:

.catch((err) => {
    if(err instanceof CustomError){
        HandleCustomError(err);
    } else {
        //Some another error is happen
    }
 })

И ваш пользовательский обработчик ошибок будет примерно таким:

function HandleCustomError(customError){
     switch(customError.error){
         case 'f1':
            //handle f1
            break;
         case 'f2':
            //handle f2
            break;
         ...
     }
}
0

Просто определите дополнительный обратный вызов catch:

p
.then(f1)
.then(f2)
.then(f3)
.catch(err => {
  if (/* is expected error */) {
    console.log(err);
    return;
  }
  throw new Error('Unexpected error');
})
.catch(err => ...)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню