【发布时间】:2015-08-30 14:10:54
【问题描述】:
由于某种原因,当它们出现在 promise 的“finally”块中时,我没有看到任何错误(如语法错误)。这是为什么呢?
angular.module('App', [])
.controller('AppCtrl', function(TestService) {
TestService.outerMethod().then(function() {
console.log('Success')
}, function(error) {
console.error('Error')
})
})
.service('TestService', function($q) {
this.outerMethod = outerMethod;
function innerMethod() {
var deferred = $q.defer();
deferred.resolve();
return deferred.promise;
}
function outerMethod() {
var deferred = $q.defer();
// syntaxErrorVisible
innerMethod().finally(function() {
// syntaxErrorNotVisible
deferred.resolve();
});
return deferred.promise;
}
})
;
Codepen:http://codepen.io/anon/pen/vOJGpG
问题在于,当我们取消注释那些发生语法错误的 cmets 时,当错误被放置在此代码的“finally”块中时,我们不会发现任何错误(在浏览器控制台中)。
【问题讨论】:
-
我刚刚注意到了同样的事情。它只是默默地失败了。
-
读了一会儿,意识到这是因为 .finally() 本身返回了一个承诺。如果您在其后添加 .catch() ,您可以看到错误。看看这个:github.com/kriskowal/q/wiki/…
标签: javascript angularjs error-handling deferred angular-promise