我有两个功能:
getDocument: function(title){
var defer = $q.defer();
$timeout(function(){
defer.resolve(true);
console.log(1);
},2000);
return defer.promise;
},
anotherFunc : function(){
var defer = $q.defer();
console.log(2);
defer.resolve(document);
return defer.promise;
}
和电话:
when('/entry/:title', {templateUrl: 'partials/views/entry.php', controller: 'entryCtrl',resolve: {
document: function($q,$route,$log,document){
var defer = $q.defer();
document.getDocument()
.then(document.anotherFunc());
return defer.promise;
}
}}).
虽然我已经对getDocument()
应用了超时,但anotherFunc()
已被调用,即使尚未解决此承诺。
为什么会这样?
我该如何避免这种行为?
答案 0 :(得分:4)
另一个函数被调用,即使诺言尚未解决。
因为您已调用:
… document.anotherFunc() …
^^
相反,您希望将函数传递给then()
,这将在promise解析时被调用:
….then(document.anotherFunc)
// or, more explicit and preserving 'this':
….then(function(promiseResult) {
document.anotherFunc();
})