让我们做一个 promise

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

现在陷入困境,可以从f1,f2,f3甚至p中的任何一个抛出错误

现在应该怎样处理f4(或catch)中的错误,因为上面抛出的错误可能是不同的类型,因此可以避免多次错误

最佳答案

您可以定义自己的自定义错误。例如 :

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;
         ...
     }
}

08-24 16:02