Javascript catch拒绝承诺并将其转换为已解决的错误代码有任何问题吗?
我在做一个项目,总是抓住被拒绝的承诺,把它变成一个有错误代码的解决方案,就像这样Javascript catch拒绝承诺并将其转换为已解决的错误代码有任何问题吗?,javascript,node.js,promise,try-catch,es6-promise,Javascript,Node.js,Promise,Try Catch,Es6 Promise,我在做一个项目,总是抓住被拒绝的承诺,把它变成一个有错误代码的解决方案,就像这样 return new Promise((resolve, reject) => { axios({ ... }).then(res => { resolve(res); }).catch(err => { let res = { ... } res.error
return new Promise((resolve, reject) => {
axios({
...
}).then(res => {
resolve(res);
}).catch(err => {
let res = { ... }
res.error = err
resolve(res)
})
})
然后,每当调用此api时,拒绝的情况都会像这样处理,即没有捕获
axios_call(...).then(res => {
if (!res.err) {
//resolve case
} else {
//reject case
}
})
我以前从来没有像这样处理过被拒绝的承诺,所以我不确定它是否会导致任何问题,或者它只是一种不同的代码风格,工作起来也很好
我检查了可能重复的q/a
但我相信他们是不一样的。因为我的问题是关于如何处理被拒绝的承诺,而这个问题是关于延迟的对象,例如,在我的情况下,错误和拒绝不会被吞没。首先,避免!您的axios\u调用
代码最好如下所示:
return axios({
...
}).catch(err => {
return { ..., error: err };
});
然后,无论何时调用此api,都会在不使用catch的情况下处理被拒绝的案例。我以前从来没有像这样处理过被拒绝的承诺,所以我不确定它是否会导致任何问题,或者它只是一种不同的代码风格,工作起来也很好
它能工作,但不好。这种错误处理方式很奇怪,而且非常不习惯。它与传统的节点式回调API存在相同的问题,具有单独的error
和result
参数:
- 承诺人不知道你是否处理了错误。您将不会收到任何未处理的拒绝警告
- 无论您是否愿意,都必须编写代码来处理
。在正常的promise用法中,您可以只提供单独的res.error
和onFulfill
回调,省略后者将使您获得转发错误的明智默认行为,而不仅仅是删除错误onReject
我看不出你的风格会有什么优势,所以我建议你避免这种情况,并使用正常的拒绝承诺。Hi的可能重复我检查了可能的重复,但我不认为我的重复,首先,延迟对象可能会吞下错误和拒绝,但我的问题正是关于如何处理拒绝。您已经在使用
catch
处理拒绝-您需要做的就是放弃新承诺
显式构造,例如返回axios(..).catch((err)=>({…,err})代码>@CertainPerformance我的问题和你说的问题不一样,你不同意吗?新的承诺是不必要的,但我的问题更多的是如何处理被拒绝的承诺。