0

我應該做到以下幾點:進樣一個服務(工廠)到另一個,這兩者都是異步

  • 查詢大型數據集名稱的API,很可能是通過服務/工廠,使用$q(異步)
  • 有另一個服務(也是異步),如果它們匹配某個字符串(搜索字段),它應該只返回上述工廠的元素。我們的目標是縮小這些值,因此我的選擇框可以處理它,因此值的數量相當少。

    • 我的控制器應該調用第二個服務,獲取這些值並將其分配給$scope屬性以供選擇框(指令)進一步使用。

我想我應該在我的控制器僅注入第二(縮小值)服務/工廠。第一個工廠(大型數據集)應作爲依賴項注入第二個服務中進行比較,從而縮小結果集的創建時間。

但是,當我向大型數據集註入工廠時,我不確定我該如何將其數據分配給變量/對象,以便我可以在第二個工廠內進一步使用它。 如果我console.log它,它顯示爲一個承諾

Object {then: function, catch: function, finally: function} 

而不是返回的數據集。

首先提及的工廠:

.factory('MedicationDisplayNamesFactory', function MedicationDisplayNamesFactory($http, $q){ 

     return { 
      getDisplayNames: function(){ 
       return $http({ 
        method: 'GET', 
        url: 'http://rxnav.nlm.nih.gov/REST/spellingsuggestions?name=ambien', 
        headers: { 
         'Content-type': 'application/json' 
        } 
       }); 
      } 

     }; 

     return MedicationDisplayNamesFactory; 

    }) 

第二:

.factory('MedicationMatchingNamesFactory', 
       ['$http', '$q', '$timeout', 'MedicationDisplayNamesFactory', 
        function MedicationMatchingNamesFactory($http, $q, $timeout, MedicationDisplayNamesFactory){ 

     return { 
      getMatchingNames: function(){ 
       var foo = MedicationDisplayNamesFactory.getDisplayNames().then(
          function(response){ 
           var bar = response.data.suggestionGroup.suggestionList.suggestion; 
          } 
         ); 

       console.log(foo); 

       return foo; 

      } 
     }; 


     return MedicationMatchingNamesFactory; 

    }]) 

在控制器,我應該能夠調用:

$scope.myData = MedicationMatchingNamesFactory.getMatchingNames(); 

這樣的事情。

+0

顯示您的代碼,以便我們可以幫助你。你必須調用promise的'.then(successCallback(yourData){...})'函數。一旦解決了承諾,successCallback將以數據作爲參數被調用。你可以鏈接承諾,實現你想要的。 – apairet 2014-10-02 17:29:01

+0

@apairet我用代碼 – developer10 2014-10-02 17:48:29

回答

0

我不能接受作爲我沒有測試它的答案 - 我簡化了這兩個工廠,最後使用sessionStorage來堅持一個工廠的結果集在記憶中,同時縮小第二個工廠的價值。

這可能是別人,所以我把它在這裏有用:

// save the large dataset to sessionStorage 
sessionStorage.allNames = angular.toJson(allNames); 

// read saved dataset and assign it to a variable 
var allNames = angular.fromJson(sessionStorage.allNames); 
1

我創建了一個回調函數的HTTP響應,並通過它作爲參數傳遞給getMatchingNames:

<!doctype html> 
 
<html> 
 
    <head> 
 
     <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.0/angular.js"></script> 
 
    </head> 
 
    <body ng-app="plunker"> 
 
     <div ng-controller="MainCtrl"> 
 
      <ul> 
 
       <li ng-repeat="name in myData"> 
 
        {{name}} 
 
       </li> 
 
      </ul> 
 
     </div> 
 
     <script> 
 
      var app = angular.module('plunker', []); 
 
      app.controller('MainCtrl', ['$scope', 'MedicationMatchingNamesFactory', function($scope, MedicationMatchingNamesFactory) { 
 
       var setMyData = function(myData) { 
 
        $scope.myData = myData; 
 
       } 
 
       
 
       MedicationMatchingNamesFactory.getMatchingNames(setMyData); 
 
      }]).factory('MedicationDisplayNamesFactory', function MedicationDisplayNamesFactory($http, $q){ 
 

 
       return { 
 
        getDisplayNames: function(){ 
 
         return $http({ 
 
          method: 'GET', 
 
          url: 'http://rxnav.nlm.nih.gov/REST/spellingsuggestions?name=ambien', 
 
          headers: { 
 
           'Content-type': 'application/json' 
 
          } 
 
         }); 
 
        } 
 

 
       }; 
 

 
       return MedicationDisplayNamesFactory; 
 

 
      }).factory('MedicationMatchingNamesFactory', 
 
         ['$http', '$q', '$timeout', 'MedicationDisplayNamesFactory', 
 
         function MedicationMatchingNamesFactory($http, $q, $timeout, MedicationDisplayNamesFactory){ 
 
          return { 
 
           getMatchingNames: function(callback){ 
 
            MedicationDisplayNamesFactory.getDisplayNames().then(function(response){ 
 
             var data = response.data.suggestionGroup.suggestionList.suggestion; 
 
             callback(data); 
 
            }); 
 
           } 
 
          }; 
 
         }]); 
 
     </script> 
 
    </body> 
 
</html>

+0

更新了我的問題謝謝,但我已經以某種方式對它進行了整理。但請,請看看這個問題,它處理的問題是同一事物的一部分:http://stackoverflow.com/questions/26169188/in-my-service-factory-i-lookup-up-一,大數據集 - 我想做對堅持它和枝 – developer10 2014-10-02 22:18:48

相關問題