【发布时间】:2019-03-19 13:18:33
【问题描述】:
UnhandledPromiseRejectionWarning 异步等待承诺
我有这个代码:
function foo() {
return new Promise((resolve, reject) => {
db.foo.findOne({}, (err, docs) => {
if (err || !docs) return reject();
return resolve();
});
});
}
async function foobar() {
await foo() ? console.log("Have foo") : console.log("Not have foo");
}
foobar();
结果:
(节点:14843)UnhandledPromiseRejectionWarning:未处理的承诺拒绝(拒绝 id:1):false
(node:14843) [DEP0018] DeprecationWarning:不推荐使用未处理的承诺拒绝。将来,未处理的 Promise 拒绝将使用非零退出代码终止 Node.js 进程。
注意:我知道我可以这样解决这个问题:
foo().then(() => {}).catch(() => {});
然后我们“回到”回调异步样式。
我们如何解决这个问题?
【问题讨论】:
-
db.foo是什么?是猫鼬吗? -
@estus 不,它是 MongoJS,见这里github.com/mafintosh/mongojs
-
async/await需要try/catch。如果你想用 async/await 风格编写这些代码,你可以试试util.promisify,它处理遵循错误优先回调风格的函数。 -
你觉得
foo().catch(console.error)有什么问题?
标签: javascript node.js