我正在做一些异步操作,并且我使用Promise的本机实现来控制执行流程:
Promise.resolve({})
.then(...)
.then(...)
.then(...)
.catch((error) => { throw new Error(error) });
没有抛出任何错误,但当我更改为console.log时,一切正常。有什么想法吗?
谢谢!
答案 0 :(得分:1)
在promise链中引发的异常只能在稍后的同一个promise链中使用catch来拦截。它在promise链之外是不可见的(如果这是你的意图。)在你的例子中,例外是"丢失"。但是,Chrome和其他一些浏览器检测到这种情况,并在控制台中发出未处理异常的警告。
具有例外的正确承诺链将是:
Promise.resolve({})
.then(...)
.then(() => { throw new Error(error); }) // throw exception here
.then(...)
.catch((error) => { /* handle error */ }); // catch it later in promise chain
.then(...)
.then(() => { throw new Error(error); }) // this exception is not caught later in the promise and is lost (shown as unhandled exception in some browsers)