0

这是Angularjs $http 等待响应的后续问题

由于我无法找到解决方案,我认为我会始终返回一个承诺,并让我的指令在 promise.then() 函数中完成工作。

$scope.getVCard = function(id){

  var vcardKey = vcardKeyPrefix+id;

  var vCardFromLS = localStorageService.get(vCardKey);
  if(vCardFromLS){
    var deferred = $q.defer();
    deferred.resolve({data:localStorageService.get(vCardKey)});
    return deferred.promise;
  }
}

在我的指令中,我将其用作

(function(angular, app) {
  app.directive('popOver',["$window","$http",function($window,$http){
    return function(scope,elem,attrs){
      elem.on('mouseover',function(){
        console.log('mouseover');
        var promise = scope.$apply(attrs.popOver);
        promise.then(function(data){
          console.log('promise then called');
          console.log(data);
          //logic here
        });
        console.log('in directive again');
        console.log(data);
      });
    };
  }]);
})(angular, app);

但是 promise.then() 并没有在第一次被调用。它被调用并在随后的鼠标悬停时正常​​工作。可能是什么问题?

我之前尝试添加 $scope.$apply()return deferred.promise但我得到应用已经在进行中的错误。我在这里想念什么?

4

1 回答 1

1

我相信这是因为您在退货之前正在解决它。不过我可能是错的。

尝试这个:

$scope.getVCard = function(id){
  var vcardKey = vcardKeyPrefix+id,
    vCardFromLS = localStorageService.get(vCardKey),
    deferred = $q.defer();
  if(vCardFromLS){
    $timeout(function(){
      deferred.resolve({data:vCardFromLS});
    }, 100);
  } else {
    $timeout(function(){
      deferred.reject();
    }, 100);
  }
  return deferred.promise;
}
于 2013-06-28T14:38:47.240 回答