关于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)
})
效果正常
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中的reject以then中指定的函数权重高,实际运用中最好只通过一种方式指定,若同时定义且将reject写在catch中,记得将then写于catch之上,一面被覆盖。
思考:是否可以在catch中继续调用reject,走进then中的reject?这样是否可以对错误进行多重链式处理?
本人小白,欢迎大神指正!
下一篇: 微信小程序实现鼠标拖动效果示例