出于某种原因,当它们出现在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
问题在于,当我们取消注释这些注释时会发生语法错误,当错误被置于此代码的“finally”块内时,我们不会发生任何错误(在浏览器控制台中)。
答案 0 :(得分:0)
问题在于你回复承诺的方式:
return deferred.promise
在这一行上,您刚刚返回原始承诺。您的来电者对附加到它的finally
一无所知。为了保持链,您需要返回finally
返回的承诺:
function outerMethod() {
var deferred = $q.defer();
// syntaxErrorVisible
return innerMethod().finally(function() {
syntaxErrorNotVisible
deferred.resolve();
});
}
答案 1 :(得分:0)
我尝试编辑它看起来更适合你尝试做什么。 它没有测试但应该工作。
.service('TestService', function($q) {
this.innerMethod = function() {
var deferred = $q.defer();
deferred.resolve();
return deferred.promise; }
this.outerMethod = function(){ var deferred1 = $q.defer();
this.innerMethod().then(
function(success){
deferred1.resolve("resolved");
},
function(error){
})
} })