我應該做到以下幾點:進樣一個服務(工廠)到另一個,這兩者都是異步
- 查詢大型數據集名稱的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();
這樣的事情。
顯示您的代碼,以便我們可以幫助你。你必須調用promise的'.then(successCallback(yourData){...})'函數。一旦解決了承諾,successCallback將以數據作爲參數被調用。你可以鏈接承諾,實現你想要的。 – apairet 2014-10-02 17:29:01
@apairet我用代碼 – developer10 2014-10-02 17:48:29