我有一个 promise :
try {
myPromise().then(function(){
console.log("ok");
}, function(err) { throw err; });
} catch(e) {
console.log("error");
}
现在我的控制转到了function(err)
,它抛出了错误,但错误没有被catch()
捕获。
最佳答案
因为 Promise 是异步的,所以流程控制不会按照您想象的方式工作。您的 try...catch block 位于 Promise 初始化代码的外部,一旦它初始化 Promise,就完成了。所以 try...catch block 只处理上面代码中的 Promise 初始化。如果 promise 被拒绝/出错(正如您在代码中所说的那样),则错误函数将仅在错误函数闭包内触发。
考虑一个常见的错误处理程序,或者您可以重构您的 try...catch block 以使其位于闭包内。
这是带有常见错误处理程序的代码:
try {
myPromise().then(function(){
console.log("ok");
}, function(err) {
errHandler(err);
});
} catch(e) {
errHandler(e);
}
function errHandler(err) {
console.log("error");
}
关于javascript - 无法在 Angular JS Promise 中抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47287320/