我是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
此外,如果将“捕获”链接到“然后”,那么它似乎也可以工作(更加混乱)
我不明白什么?
谢谢
答案 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();
调用中的异常。