这个问题在这里已有答案:
简化代码:
//文件A.
module.exports = new Promise((res, rej) => {
... do stuff
if (someErr) {
return rej(someErr);
}
return res(stuff)
}
//文件B.
const fileA = require('./fileA');
... express stuff
app.get('/getA', (req, res) => {
fileA
.then(data => res.send(data))
.catch(e => res.send(404, e));
});
正如您所看到的,在 file B
中对路径运行发布请求时会捕获到承诺拒绝 . 这样,也可以发送具有原始错误槽的404响应 .
问题是,无论何时调用路由,都会有 Unhandled Promise Rejection 来自 file A
. 很烦人 .
(node:5040)UnhandledPromiseRejectionWarning:未处理的承诺拒绝 . 此错误源于通过抛出异步函数而没有catch块,或者拒绝未使用.catch()处理的promise . (拒绝ID:1)(节点:5040)[DEP0018]弃用警告:不推荐使用未处理的拒绝承诺 . 将来,未处理的承诺拒绝将使用非零退出代码终止Node.js进程 .
是的,当然,我可以在 file A
中捕获拒绝,但我宁愿它在上游传播并稍后捕获它 .
1 回答
通过构造代码的方式,在
.catch
附加到promise之前抛出拒绝,所以从技术上讲,它在抛出时是未处理的 .我确定你有理由为什么要这样构造它(也许只运行"do stuff"一次?),所以一个可能的解决方法是: