Node.js - 在 ES6 承诺链中抛出异常
Node.js - throw exception inside ES6 promise chain
作为节点的一部分。js/Express API 我正在开发,我已经构建了一个自定义错误处理程序,可以让我在需要时抛出特定错误,例如BadRequest 或 NotFound 等
当我想在承诺链中抛出时出现问题。例如:
db.doSomethingAsync().then(data => {
if(data.length === 0){
throw new errors.ResourceNotFound({ resource: "foo" });
}
});
在对该主题进行了大量阅读后,我发现此错误将被 Promise 吞没,因此导致未处理的 Promise 拒绝。
我知道我可以拒绝,但我不确定我如何处理特定错误(而不是我不想要的关于拒绝的包罗万象)。
此外,要拒绝,我是否不需要在我的承诺链中创建一个新的承诺?感觉很乱。
任何人都可以建议如何处理在承诺链中抛出特定异常吗?
除了对 then() 的第一个回调是 resolve 回调并接收数据之外,您还可以向其提供第二个回调,即 reject 回调并接收错误.所以你可以在下一个 then 的第二个回调中捕获这个特定错误:
db
.doSomethingAsync()
.then(data => {
if(data.length === 0){
throw new errors.ResourceNotFound({ resource: "foo" });
}
})
.then(massagedData => {
// work with massagedData here
}, err => {
// handle err here which is previous thrown error
// assert.ok( err instanceof errors.ResourceNotFound() )
})
.catch(err => {
// this will catch unhandled errors if any
});
then() 默认情况下 returns 一个承诺,如果它的任何回调(无论是第一个还是第二个)抛出错误,那么它 returns 被拒绝的 promise 及其原因将被下一个拒绝回调(如果有)或最后的 catch 捕获。所以你不需要创建一个新的承诺。
作为节点的一部分。js/Express API 我正在开发,我已经构建了一个自定义错误处理程序,可以让我在需要时抛出特定错误,例如BadRequest 或 NotFound 等
当我想在承诺链中抛出时出现问题。例如:
db.doSomethingAsync().then(data => {
if(data.length === 0){
throw new errors.ResourceNotFound({ resource: "foo" });
}
});
在对该主题进行了大量阅读后,我发现此错误将被 Promise 吞没,因此导致未处理的 Promise 拒绝。
我知道我可以拒绝,但我不确定我如何处理特定错误(而不是我不想要的关于拒绝的包罗万象)。
此外,要拒绝,我是否不需要在我的承诺链中创建一个新的承诺?感觉很乱。
任何人都可以建议如何处理在承诺链中抛出特定异常吗?
除了对 then() 的第一个回调是 resolve 回调并接收数据之外,您还可以向其提供第二个回调,即 reject 回调并接收错误.所以你可以在下一个 then 的第二个回调中捕获这个特定错误:
db
.doSomethingAsync()
.then(data => {
if(data.length === 0){
throw new errors.ResourceNotFound({ resource: "foo" });
}
})
.then(massagedData => {
// work with massagedData here
}, err => {
// handle err here which is previous thrown error
// assert.ok( err instanceof errors.ResourceNotFound() )
})
.catch(err => {
// this will catch unhandled errors if any
});
then() 默认情况下 returns 一个承诺,如果它的任何回调(无论是第一个还是第二个)抛出错误,那么它 returns 被拒绝的 promise 及其原因将被下一个拒绝回调(如果有)或最后的 catch 捕获。所以你不需要创建一个新的承诺。