пусть p будет обещанием, которое мы можем сделать
p
.then(f1)
.then(f2)
.then(f3)
.catch(f4)
теперь в catch, ошибка может быть выбрана из любого из f1, f2, f3 или даже p отклоненных
теперь какой должен быть правильный способ обработки ошибок в f4 (или в catch), так как ошибки, вышеперечисленные, могут быть разных типов, могут несколько, если в f4 избежать?
Вы можете определить собственную пользовательскую ошибку. Например:
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;
...
}
}
Просто определите дополнительный обратный вызов 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 => ...)