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

我需要实现在一个链式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();

假如是每一个函数都是向后端发送异步请求,而后端返回的数据格式一定是固定的,也就是说我们不能根据后端返回的数据去判断是哪个函数抛出了错误。该怎么办??


谢谢各位帮忙!


Helenr
浏览 821回答 3
3回答

holdtom

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

阿晨1998

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();

BIG阳

两种方法吧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");})
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript