javascript - 即使我确实处理了未处理的 promise 拒绝

标签 javascript promise request

我包裹了一个 request-promise-native调用返回 promise 的函数。

import request from 'request-promise-native';
function requestWrapper(url) {
    return request(url)
        .then(data => {...})
        .catch(err => Promise.reject(err));
}

简单吧?

现在我正在使用这个功能,then工作正常,但 catch永远抓不到Promise.reject :
requestWrapper('http://some-url.com')
    .then(data => {...})
    .catch(err => console.log(err));

我从来没有接到电话的catch !
如果我更改 catch 中的返回语句的 requestWrapper对此:
.catch(err => err)

甚至这个:
.catch(err => Promise.resolve(err))

返回 resolve ,我在 then 上得到错误堆栈的requestWrapper像预期的那样打电话。

节点喊道:
(node:24260) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 2): ...

最佳答案

好的,感谢@pathurs 和@Hendry,我得到了我需要的东西。

首先,正确的方法是@Hendry 建议的,即不在包装器中处理捕获,而是在函数调用中处理。这就是我去的方式:

function requestWrapper(url) {
    return request(url)
        .then(data => {...})
}
requestWrapper('http://some-url.com')
    .then(data => {...})
    .catch(err => console.log(err));

伟大的!
但显然,@pathurs 方式也有效:
function requestWrapper(url) {
        return request(url)
            .then(data => {...})
            .catch(err => Promise.reject(err));
    }
    requestWrapper('http://some-url.com')
        .then(data => {...}, err => console.log(err));

我不明白这是原生功能,还是 request 的一些附加功能图书馆:
https://github.com/request/request-promise#thenonfulfilled-onrejected

关于javascript - 即使我确实处理了未处理的 promise 拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48398094/

相关文章:

javascript - 从调用到获取的类型 Promise 是通用的吗?

python - 请求对象的唯一标识符 - django 或 django Rest Framework

javascript - 我怎样才能显示第一个项目,在 angularjs 上切换就绪

javascript - 单击事件在 contenteditable div 中不起作用

javascript - promise 在循环内等待

javascript - Q.all 返回异步函数而不是我想要解析的值

javascript - 从数据库检索多个 JSON 对象会导致 Express 错误

Python imaplib 获取正文电子邮件 gmail

javascript - 递归 Promise - 有时有效,有时无效

javascript - 使用 $(document).ready() 函数