【发布时间】:2016-08-21 12:03:54
【问题描述】:
我有一个返回以下对象的工厂
返回{
getCuisines: function(cuisineNames){
if (typeof cuisineNames !== 'string' && typeof cuisineNames !== undefined) {
throw new Error('Cusine type should be a string or should not have value');
}
cuisineNames = cuisineNames || options.term;
cuisineNames = cuisineNames.split(',');
var promises=[];
cuisineNames.forEach(function(cuisine){
var defered = $q.defer();
options.term = cuisine + ' '+ 'food';
$http.get(url,{params: options}).success(function(data){
defered.resolve(data);
localStorageService.setDishes(cuisine,data.businesses);
console.log("Cuisine ="+cuisine);
console.log(data);
});
promises.push(defered.promise);
});
return $q.all(promises);
}
};
我从控制器调用这个工厂
MyFactory.getCuisines('American,Indian,Italian,Mexican,Japanese,Korean').then(function(data){
console.log(data);
});
应用程序执行时。我把所有的菜都当作韩国菜。最后一个参数通过了。
更新 1:
我将我的代码更新为以下代码。删除了 $q。将 $http 推送到 promises 数组仍然无法正常工作。相同的反应。我检查了我的服务器,所有对服务器的调用都是针对韩国食品的。
return {
getCuisines: function(cuisineNames){
if (typeof cuisineNames !== 'string' && typeof cuisineNames !== undefined) {
throw new Error('Cusine type should be a string or should not have value');
}
cuisineNames = cuisineNames || options.term;
cuisineNames = cuisineNames.split(',');
var promises=[];
cuisineNames.forEach(function(cuisine){
options.term = cuisine + ' '+ 'food';
console.log(options.term); //I see different cuisine name here
promises.push($http.get(url,{params: options}).success(function(data){
localStorageService.setDishes(cuisine,data.businesses);
console.log(data);
}));
});
return $q.all(promises);
}
};
【问题讨论】:
-
首先,为什么
$q服务为$http服务? http 服务默认返回一个承诺。看到这个问题:stackoverflow.com/questions/36631601/… -
小心,一次只能有6个ajax调用(导航器限制)。您最好使用 1 次调用来获得所有结果。
标签: angularjs