我的服务(工厂)进行API调用和响应数据分配给一个变量:
.factory('MedicationMatchingNamesFactory',
['$http', '$q', 'MedicationDisplayNamesFactory',
function MedicationMatchingNamesFactory($http, $q, MedicationDisplayNamesFactory){
return {
getMatchingNames: function(inputValue){
var matches = [];
// I thought this may be set as null so I'm able to
// differentiate it from the below array form (when exists)
var allNames = null;
MedicationDisplayNamesFactory.getDisplayNames().then(
function(response){
// this is the large dataset - now as array
var allNames = response.data.displayTermsList.term;
angular.forEach(allNames, function(value, key){
if(value.indexOf( inputValue ) !== -1){
matches.push(value);
}
});
}
);
return matches;
}
};
return MedicationMatchingNamesFactory;
}])
我采用了棱角分明的用户界面的“用户界面,选择”指令,根据输入的字符串这个大数据集内进行搜索。
在我的控制器:
$scope.$on('inputStarted', function(event, value){
if(value.length > 3){
$scope.meds.displayNames = MedicationMatchingNamesFactory.getMatchingNames(value);
console.log($scope.meds.displayNames);
}
});
现在,为了避免查询API(实际上是调用包含调用API另一个服务)每输入字符数大于3的时候,我认为这将是巨大的,如果我能够检查是否allNames
是null
(空,做电API),或者它是一个array
(跳过调用,只需使用)。
我试着移动angular.forEach
外呼的一部分,承诺不过呢,很明显,什么都不会发生,因为它不是在第一次运行尚未解决。
有没有一种方法能有这个allNames
数据集我做的API调用前检查?