我很难理解为什么在调用updateStatus()
后我看到'promise resolved'登录到控制台,但不是'refreshGames'。如果refreshGames()
中的代码永远不会运行,那么承诺如何解决?
var refreshGames = function() {
console.log('refreshGames');
var defer = $q.defer();
playersService.getGames({
playerId: playerId
}).$promise.then(function(data) {
vm.games = data;
return defer.promise;
});
};
var updateStatus = function() {
$q.all([refreshGames.promise]).then(function() {
console.log('promise resolved');
populateOptions(vm.games);
vm.tableParams.reload();
});
};
答案 0 :(得分:2)
因为你的函数refreshGames
什么都不返回,所以它应该返回promise并且必须解决defer,如下所示:
var refreshGames = function() {
console.log('refreshGames');
var defer = $q.defer();
playersService.getGames({
playerId: playerId
}).$promise.then(function(data) {
vm.games = data;
defer.resolve(data);
});
return defer.promise;
};
并在$q.all
中执行refreshGames()
答案 1 :(得分:2)
refreshGames.promise
是undefined
- 在refreshGames上创建此属性的任何地方都没有代码
$ q.all中的任何非承诺都是有效的,并且实际上等同于Promise.resolve(n)(或者你用$ q执行此操作
所以,你的$ q.all基本上是
$q.all([undefined]).then(function() {
...
});
因此立即执行