gpt4 book ai didi

Node.js - 在 ES6 promise 链中抛出异常

转载 作者:搜寻专家 更新时间:2023-11-01 00:38:55 26 4
gpt4 key购买 nike

作为我正在开发的 Node.js/Express API 的一部分,我构建了一个自定义错误处理程序,可以让我在需要时抛出特定错误,例如BadRequest 或 NotFound 等

当我想在一个 promise 链中抛出时,问题就出现了。例如:

db.doSomethingAsync().then(data => {

if(data.length === 0){
throw new errors.ResourceNotFound({ resource: "foo" });
}
});

在大量阅读该主题后,我发现此错误将被 promise 吞没,因此导致未处理的 promise 拒绝。

我知道我可以拒绝,但我不确定如何处理特定错误(而不是我不想要的拒绝的包罗万象)。

此外,要拒绝,我是否不需要在我的 promise 链中创建一个新的 promise ?感觉很乱。

谁能建议如何处理在 promise 链中抛出特定异常?

最佳答案

除了对 then() 的第一个回调(解析回调并接收数据)之外,您还可以向其提供第二个回调,即拒绝回调并接收错误。所以你可以在下一个 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() 默认返回一个 promise ,如果它的任何回调(无论是第一个还是第二个)抛出错误,那么它返回一个被拒绝的 promise ,其原因将被下一个拒绝捕获回调(如果有)或最后捕获。所以你不需要创建一个新的 promise 。

参见 Promise.prototype.then()

关于Node.js - 在 ES6 promise 链中抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41730691/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com