捕获错误、中断后续执行三种方法
伪代码
1 2 3 4 5 6
| const myPromise = new Promise((resolve, 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) => { }).catch(pendingPromise) ;(async () => { await myPromise init() })()
|
如果是reject,则一直pending,中断后续执行
扩展阅读
永远不 resove/reject 会导致内存泄漏吗?