运行以下简单代码,我得到UnhandledPromiseRejectionWarning
:
var d = new Promise((resolve, reject) => {
if (false) {
resolve('hello world');
} else {
reject('no bueno');
}
});
d.then((data) => console.log('success : ', data));
d.catch((error) => console.error('error : ', error));
完整的答复是:
error : no bueno
(node:12883) UnhandledPromiseRejectionWarning: no bueno
(node:12883) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 2)
(node:12883) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
似乎被解雇了d.catch()
。我注意到,如果注释掉d.then()
,警告消息就会消失。
我正在从node foobar.js
之类的终端调用脚本。
我做错什么了吗?
在MacOS High Sierra下使用节点v8.14,v10和v11进行了测试。
答案 0 :(得分:3)
d.then()
创建了一个新的Promise,但由于d
被拒绝而被拒绝。那就是被拒绝的诺言,没有得到正确处理。
您应该将.then
和.catch
链接起来:
d
.then((data) => console.log('success : ', data))
.catch((error) => console.error('error : ', error));