让 p 成为我们可以实现的承诺。
p
.then(f1)
.then(f2)
.then(f3)
.catch(f4)
现在,在catch中,错误可以从f1、f2、f3甚至p rejected中抛出。
现在,在f4(或catch中)处理错误的适当方式是什么,因为上面抛出的错误可能是不同类型的,是否可以避免在f4中使用多个if else?
p
.then(f1)
.then(f2)
.then(f3)
.catch(f4)
现在,在catch中,错误可以从f1、f2、f3甚至p rejected中抛出。
现在,在f4(或catch中)处理错误的适当方式是什么,因为上面抛出的错误可能是不同类型的,是否可以避免在f4中使用多个if else?
function CustomError(errorText){
this.error = errorText;
}
修改你的函数。为每个返回的 Promise 添加 catch 块:
function p(){
return new Promise(function(resolve, reject){
//Your functionality here
})
.catch(function(error){
Promise.reject(new CustomError('f1')));
})
}
等等:f2、f3、f4
你的捕获块将是:
.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 => ...)
try {
const v1 = await f1();
} catch (err) {
// Process err
}
try {
const v2 = await f2(v1);
} catch (err) {
// Process err
}