我正在努力理解为什么在调用updateStatus()后看到“已解决承诺”登录到控制台,却没有看到“ 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();
  });
};

最佳答案

由于您的函数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()

10-04 13:21