javascript - 无法在 Angular JS Promise 中抛出错误

标签 javascript angularjs

我有一个 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/

相关文章:

javascript - 如何用相同数量的空格替换匹配的字符

javascript - 更改简单表单上 Enter 按钮的功能

angularjs - Angular ui-grid 表格、客户端分页和滚动

javascript - Angularjs $http获取json数据,但不会显示

angularjs - 如何使用ionic中的参数返回上一个 View ?

javascript - 当 ng-show 满足要求时,AngularJS 淡入 div 元素

javascript - 是否可以使用 jquery 动态更改类的 css 属性?

javascript - 有人可以向其中注入(inject)恶意代码吗?

javascript - ng-hide-remove 和 ng-hide-add 的动画转换表现不同

javascript - Angular,在 $get 中调用新的构造函数(在提供者中)