用了这么久的Promise,写一下他的几种中断或者取消方案吧。
1、Promises/A+标准:原Promise对象的状态将跟新对象保持一致。
利用这一特性,当新对象保持“pending”状态时,原Promise链将会中止执行。
Promise.resolve().then(() => {
console.log('ok1')
return new Promise(()=>{}) // 返回“pending”状态的Promise对象
}).then(() => {
// 后续的函数不会被调用
console.log('ok2')
}).catch(err => {
console.log('err->', err)
})
复制代码
2、Promise.race竞速方法
利用这一特性,也能达到后续的Promise不再执行
let p1 = new Promise((resolve, reject) => {
resolve('ok1')
})
let p2 = new Promise((resolve, reject) => {
setTimeout(() => {resolve('ok2')}, 10)
})
Promise.race([p2, p1]).then((result) => {
console.log(result) //ok1
}).catch((error) => {
console.log(error)
})
复制代码
3、当Promise链中抛出一个错误时,错误信息沿着链路向后传递,直至被捕获。
利用这一特性能跳过链中被捕获前的函数的调用,直至链路终点。
Promise.resolve().then(() => {
console.log('ok1')
throw 'throw error1'
}).then(() => {
console.log('ok2')
}, err => {
// 捕获错误
console.log('err->', err)
}).then(() => {
// 该函数将被调用
console.log('ok3')
throw 'throw error3'
}).then(() => {
// 错误捕获前的函数不会被调用
console.log('ok4')
}).catch(err => {
console.log('err->', err)
})
复制代码
小马,献丑了,欢迎大家指出错误,一起交流交流。
喜欢的点个赞吧。 大家加油!