javascript承诺未处理的拒绝问题

时间:2020-04-13 18:13:46

标签: javascript promise try-catch

我是javascript新手,并且一直在学习Promise。但是有一个我无法理解的问题:

下面的代码(在node.js中)将promise状态设置为“ rejected”,在这里我希望执行“ catch”子句中指定的代码-是-但它也会引发未处理的异常 UnhandledPromiseRejectionWarning 尽管有'catch'子句

p = new Promise( function (resolve, reject) {
    reject();  
 } );

p.then( function () {console.log("success")} );
p.catch( function () {console.log("fail")} ); // prints fail and raises exception

如果删除了'then'子句,它将起作用:

p = new Promise( function (resolve, reject) {
    reject();  
 } );

p.catch( function () {console.log("fail")} );  // prints fail

此外,如果将“捕获”链接到“然后”,那么它似乎也可以工作(更加混乱)

我不明白什么?

谢谢

1 个答案:

答案 0 :(得分:1)

您应该将对诺言的呼叫链接在一起,而不是将它们作为单独的呼叫进行。例如:

p = new Promise( function (resolve, reject) {
    reject();  
 } );

p.then( function () {console.log("success")} )
 .catch( function () {console.log("fail")} );

您正在执行的是第一个p.then执行,它不处理拒绝情况,因此会引发异常(您看到的未处理错误)。 p.catch行也将执行,您将看到“失败”输出,但这不会停止第一次p.then();调用中的异常。