簡體   English   中英

angularjs承諾然后不會被第一次調用

[英]angularjs promise then not called first time

這是Angularjs $ http的后續問題, 等待響應

由於我無法為此找到解決方案,因此我認為我將始終返回一個promise並讓我的指令在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()不會在第一次被調用。 它會被調用,並且在以后的鼠標懸停時可以正常工作。 可能是什么問題?

我試圖在return deferred.promise之前添加$ scope。$ apply(),但是我正在獲取應用程序進行中錯誤。 我在這里想念什么?

我相信這是因為您在退貨之前已經解決了它。 我可能是錯的。

嘗試這個:

$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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM