承诺then()和catch()UnhandledPromiseRejectionWarnin

时间:2018-12-06 01:12:39

标签: javascript node.js ecmascript-6

运行以下简单代码,我得到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进行了测试。

1 个答案:

答案 0 :(得分:3)

d.then()创建了一个新的Promise,但由于d被拒绝而被拒绝。那就是被拒绝的诺言,没有得到正确处理。

您应该将.then.catch链接起来:

d
  .then((data) => console.log('success : ', data))
  .catch((error) => console.error('error : ', error));