我在控制器中有以下功能:
this.someFunction = function() {
var filter = {
type: 'E'
};
someService.httpPostFunction(filter).then(function(response) {
console.log(response);
});
filter.type = 'H';
someService.httpPostFunction(filter).then(function(response) {
console.log(response);
});
filter.type = 'W';
someService.httpPostFunction(filter).then(function(response) {
console.log(response);
});
};
这是someService.httpPostFunction
:
httpPostFunction: function(filter) {
var deferred = $q.defer();
var httpPromise = $http.post(url,filter)
.then(function(response) {
deferred.resolve(response.data);
}, function(error) {
deferred.reject(error.data);
});
return deferred.promise;
}
someService.httpPostFunction
会根据filter.type
向我返回不同的数据。我希望他们并行运行。但是,即使在第一次filter.type
来电时,此功能的行为就像'W'
设置为httpPostFunction
一样。
创建filter
变量的副本,更改副本的type
然后传递副本会给我正确的结果,但这是不可行的。如何使用相同的变量使代码正常工作?
答案 0 :(得分:2)
您可以使用数组存储promises,然后使用$ q.all来捕获所有承诺,如下所示
NSObject *str;
NSMutableArray* strongArray=[[[NSMutableArray alloc]initWithArray:arr]mutableCopy];
for (str in arr)
{
if ([str isKindOfClass:[NSArray class]]) {
if (!(str==[NSNull null])) {
str=[[self ArrayCheckforNull:(NSMutableArray *)str]mutableCopy];
[strongArray removeObjectAtIndex:0];
[strongArray addObject:str];
}
else
{
[strongArray removeObject:str];
[strongArray addObject:@"----"];
}
}
else if ([str isKindOfClass:[NSDictionary class]]) {
if (!(str==[NSNull null])) {
str=[[self jsonCheckforNull:(NSMutableDictionary*)str]mutableCopy];
[strongArray removeObjectAtIndex:0];
[strongArray addObject:str];
}
else
{
[strongArray removeObject:str];
[strongArray addObject:@"----"];
}
}
else {
if (str ==[NSNull null]) {
[strongArray removeObject:str];
[strongArray addObject:@"----"];
}
}
}
return strongArray;
答案 1 :(得分:1)
您可以使用$q.all
发送多个http请求并行
var filterObj = {
type: ['E', 'H', 'W']
};
var arr = [];
for(item in filterObj.type){
arr.push(someService.httpPostFunction(item))
}
$q.all(arr).then(function(responses) {
console.log( responses[0].data);
console.log( responses[1].data);
console.log( responses[2].data);
});