解决Promise函数uncatch错误及中断await

捕获错误、中断后续执行三种方法

伪代码

1
2
3
4
5
6
const myPromise = new Promise((resolve, reject) => {
// resolve() or reject()
})
const init = () => {
// ...
}

方法一:promise.catch

1
2
3
4
5
6
7
(async () => {
myPromise.then(() => {
init()
}).catch((err) => {
console.log(err)
})
})()

方法二:try…catch…

1
2
3
4
5
6
7
8
(async () => {
try {
await myPromise
init()
} catch(err) {
console.log(err)
}
})()

方法三:使用await并中断后续执行

在具体业务代码中,不想写大量catch、try…catch…,又要保证异常后能中断后续执行

1
2
3
4
(async () => {
await myPromise
init()
})()

但如果 myPromise 是 reject, 会出现 uncaught(in promise) 错误。

如下将避免报错,将异常统一处理。

1
2
3
4
5
6
7
8
9
10
11
12
// 统一处理异常
const pendingPromise = (err) => {
console.log(err)
return new Promise(_ => _)
}
const myPromise = new Promise((resolve, reject) => {
// resolve() or reject()
}).catch(pendingPromise)
;(async () => {
await myPromise
init()
})()

如果是reject,则一直pending,中断后续执行

扩展阅读

永远不 resove/reject 会导致内存泄漏吗?


解决Promise函数uncatch错误及中断await
http://example.com/20230103-解决promise函数uncatch错误及中断await/
作者
csorz
发布于
2023年1月3日
许可协议