我收到所有回复后,我正在向多个环境发出$http
请求并进行处理。我使用下面的代码:
$q.all(Object.keys($rootScope.envs).map(request)).then(function(res){
var results = {};
for (var env in res) {
results[env] = res[env].data;
}
}, function(err){
console.error(err);
});
function request(env) {
return $http.get(callService.getDomainUrl()+'/'+$rootScope.envs[env]+ '/hosts.json');
}
上面的代码工作正常,但结果对象如下所示:
{
0: {data:{}},
1: {data:{}},
2: {data:{}},
3: {data:{}}
}
我希望每个键都有相应的响应,结果应该像
{
env1: {data:{//data for env1}},
env2: {data:{//data for env2}},
env3: {data:{//data for env3}},
env4: {data:{//data for env4}},
}
如何映射对应的响应?请告诉我如何获取此信息,因为这是异步请求。我是否应该从API获得一些信息来了解API的来源?
答案 0 :(得分:0)
我认为最简单的方法是将结果处理推送到请求函数中,这样你在范围内仍然有'env'值。
var results = {};
$q.all(Object.keys($rootScope.envs).map(request)).then(function(res){
// Do something with 'results' here.
}, function(err){
console.error(err);
});
function request(env) {
return $http.get(callService.getDomainUrl()+'/'+$rootScope.envs[env]+ '/hosts.json')
.then(function(res) { results[env] = res.data; return env; });
}
另一种选择是将return env
替换为return [env, res.data]
,然后您可以像原始代码一样返回创建结果对象。
重要的是要记住,您可以单独处理$http.get
承诺,也可以使用then
中$q.all
来电的承诺。