Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript catch拒绝承诺并将其转换为已解决的错误代码有任何问题吗?_Javascript_Node.js_Promise_Try Catch_Es6 Promise - Fatal编程技术网

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
参数:

  • 承诺人不知道你是否处理了错误。您将不会收到任何未处理的拒绝警告
  • 无论您是否愿意,都必须编写代码来处理
    res.error
    。在正常的promise用法中,您可以只提供单独的
    onFulfill
    onReject
    回调,省略后者将使您获得转发错误的明智默认行为,而不仅仅是删除错误

我看不出你的风格会有什么优势,所以我建议你避免这种情况,并使用正常的拒绝承诺。

Hi的可能重复我检查了可能的重复,但我不认为我的重复,首先,延迟对象可能会吞下错误和拒绝,但我的问题正是关于如何处理拒绝。您已经在使用
catch
处理拒绝-您需要做的就是放弃
新承诺
显式构造,例如
返回axios(..).catch((err)=>({…,err})@CertainPerformance我的问题和你说的问题不一样,你不同意吗?新的承诺是不必要的,但我的问题更多的是如何处理被拒绝的承诺。