欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于Promise中的catch和reject的一个小思考

程序员文章站 2022-03-20 22:11:39
...

今天在学习Promise的时候,看到失败的函数reject()既可以通过.then()的第二个参数指定,又可以通过.catch()指定,故因此引发了关于同时指定、顺序不同时的情况的思考:

情况一:单独指定

1.1 单独通过then()指定:
   const p = new Promise((resolve, reject) => {
        setTimeout(() => {
            // resolve('111')
            reject('222')
        }, 1000)
    })

    p.then(value => {
        console.log(value)
    }, reason => {
        console.log(reason)
    })

关于Promise中的catch和reject的一个小思考
效果正常

1.2 通过catch()单独指定
    const p = new Promise((resolve, reject) => {
        setTimeout(() => {
            // resolve('111')
            reject('222')
        }, 1000)
    })

    p.then(value => {
            console.log(value)
        })
        .catch(reason => {
            console.log(reason)
        })

效果与上面一样为正常

二、同时指定

2.1 then()在上,catch()在下
    const p = new Promise((resolve, reject) => {
        setTimeout(() => {
            // resolve('111')
            reject('222')
        }, 1000)
    })

    p.then(value => {
            console.log(value)
        }, reason => {
            console.log(reason)
        })
        .catch(reason => {
            console.log(reason)
        })

运行效果正常

2.2 then()在下,catch()在上
    const p = new Promise((resolve, reject) => {
        setTimeout(() => {
            // resolve('111')
            reject('222')
        }, 1000)
    })
    p.catch(reason => {
        console.log(reason)
    }).then(value => {
        console.log(value)
    }, reason => {
        console.log(reason)
    })

注:这时候出现问题,catch中的执行过后,会继续去then中的reject函数中执行,如下:关于Promise中的catch和reject的一个小思考

关于Promise中的catch和reject的一个小思考

建议:promise中的reject以then中指定的函数权重高,实际运用中最好只通过一种方式指定,若同时定义且将reject写在catch中,记得将then写于catch之上,一面被覆盖。
思考:是否可以在catch中继续调用reject,走进then中的reject?这样是否可以对错误进行多重链式处理?

本人小白,欢迎大神指正!

相关标签: es6