如何全局捕捉Promise的异常?

我有一个框架,全局用try-catch包裹用于全局异常处理,但是其中的Promise的异常无法处理。这种要如何处理?

思路:基于Promise做封装,其中处理异常。框架中用封装的Promise,但是不知道该怎么写新的Promise

阅读 8.4k
3 个回答

node

process.on('unhandledRejection', function(err, promise) {
})

browser

window.addEventListener('unhandledrejection', function(event) {
});

你的 Promise catch 到异常再 throw 出来不就好了。

全局捕获示例

window.addEventListener('unhandledrejection', function(event) {
  // the event object has two special properties:
  alert(event.promise); // [object Promise] - the promise that generated the error
  alert(event.reason); // Error: Whoops! - the unhandled error object
});

new Promise(function() {
  throw new Error("Whoops!");
}); // no catch to handle the error

简单封装

let myPromise = (promise, callback) => {
  promise.then(callback).catch(console.log)
}
let p = new Promise((resolve, reject) => reject('error'))
let cb = () => console.log('callback')
myPromise(p, cb)  // error
推荐问题