嗨,我正在使用angluarjs并行访问5个Web服务。
现在,响应到达时,我无法确定它所属的服务。
我怎么知道哪个回应?
演示代码为:
var requestUrl=[url1,url2,url3,url4,url5];
for(var i=0;i<requestUrl.length;i++){
$http.get(requestUrl[i]).success(response){
console.log(response);
};
}
最佳答案
这里的问题是您不知道哪个请求响应,因为您没有隔离上下文。
让我们解释一下:
var requestUrl=[url1,url2,url3,url4,url5];
for(var i=0;i<requestUrl.length;i++){
// Here you're making an async call to a URL
$http.get(requestUrl[i]).success(response){
// When the response arive, i=4, it appends after the loop is over
console.log(response);
};
}
为避免这种情况,有2种好的做法:
->将循环更改为“ forEach”
var requestUrl=[url1,url2,url3,url4,url5];
requestUrl.forEach(function(url) {
$http.get(url).success(response){
console.log(url '+' response);
};
}
->保留for循环,但使用闭包保留索引或URL
var requestUrl=[url1,url2,url3,url4,url5];
for(var i=0;i<requestUrl.length;i++){
// Here you can keep "i" in "index"
(function(index) {
$http.get(requestUrl[i]).success(response){
console.log(requestUrl[index] + response);
};
})(i);
}