【发布时间】:2015-09-30 07:38:07
【问题描述】:
看这个blog对promise的post处理,我修改了失败的例子:
var myApp = angular.module('myApp',[]);
myApp.controller("MyCtrl", function ($q, $scope) {
(function() {
var deferred = $q.defer();
var promise = deferred.promise;
promise.then(function(result) {
console.log("success pass 1 - " + result);
return result;
}, function(reason) {
console.log("failure pass 1, reason:", reason);
throw new Error("failed with: " + reason);
}).
then(function(result) {
console.log("2nd success! result: ", result);
}, function(reason) {
console.log("2nd failure! reason: ", reason);
});
console.log("calling deferred.reject('bad luck')");
deferred.reject("bad luck");
})();
对于我的第一个失败函数,我注意到将 throw 替换为 return 会导致:
calling deferred.reject('bad luck')
failure pass 1, reason: bad luck
2nd success! result: Error {stack: (...), message: "failed with: bad luck"}
因此,我将return 替换为throw 以实现所需的failure -> failure 结果。
calling deferred.reject('bad luck')
failure pass 1, reason: bad luck
Error: failed with: bad luck at ...app.js
2nd failure! reason: Error {stack: ... "failed with: bad luck"}
抛出的错误似乎没有被捕获。这是为什么?内部故障案例不应该捕获到这个抛出的错误吗?
另外,在链式 Promise 中,是否只能通过抛出 Error 来达到连续错误情况(在这种情况下是第二个链式 Promise 的失败情况)?
【问题讨论】:
标签: javascript angularjs promise angular-promise