为了账号安全,请及时绑定邮箱和手机立即绑定

链式promise函数中,如何判断是哪个promise抛出的错误

链式promise函数中,如何判断是哪个promise抛出的错误

Helenr 2019-03-13 19:14:31
我需要实现在一个链式promise函数中,中间的任何一个函数错误则程序终止,并且能捕获到出错函数,然后根据不同的出错函数执行不同的操作。如下代码则该如何改进?请勿在error对象中带信息function f1(){    return new Promise((resolve,reject) =>{        setTimeout(() =>{            reject("err");        },1000)    })}function f2(){    return new Promise((resolve,reject) =>{        setTimeout(() =>{            reject("err");        },1000)    })}function f3(){    return new Promise((resolve,reject) =>{        setTimeout(() =>{            reject("err");        },1000)    })}const foo = () =>{    return f1().then(() =>{        return f2();    }).then(() =>{        return f3();    }).catch(err =>{        // 如何判断这个错误是哪个函数抛出的??        return err;    })} foo();假如是每一个函数都是向后端发送异步请求,而后端返回的数据格式一定是固定的,也就是说我们不能根据后端返回的数据去判断是哪个函数抛出了错误。该怎么办??谢谢各位帮忙!
查看完整描述

3 回答

?
holdtom

TA贡献1805条经验 获得超10个赞

reject里放有用的信息啊 下一步做什么可以放到reject里


查看完整回答
反对 回复 2019-03-23
?
阿晨1998

TA贡献2037条经验 获得超6个赞

function f1(){

    return new Promise((resolve,reject) =>{

        setTimeout(() =>{

            reject("err1");

        },1000)

    })

}


function f2(){

    return new Promise((resolve,reject) =>{

        setTimeout(() =>{

            reject("err2");

        },1000)

    })

}


function f3(){

    return new Promise((resolve,reject) =>{

        setTimeout(() =>{

            reject("err3");

        },1000)

    })

}


const foo = () =>{

    return f1().then(() =>{

        return f2();

    }).then(() =>{

        return f3();

    }).catch(err =>{

        // 如何判断这个错误是哪个函数抛出的??

        console.log(err);

        return err;

    })


foo();


查看完整回答
反对 回复 2019-03-23
?
BIG阳

TA贡献1859条经验 获得超6个赞

两种方法吧


1 reject抛出的Error对象带有信息


function f1(){

    return new Promise((resolve,reject) =>{

        setTimeout(() =>{

            reject(new Error("f1 err"));

        },1000)

    })

}

2 在每一个then方法的第二个参数函数里输出错误信息


f1().then(() =>{

    return f2();

},()=>{

    throw Error("f1 err");

})


查看完整回答
反对 回复 2019-03-23
  • 3 回答
  • 0 关注
  • 820 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信