您好我正在使用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);
};
}
答案 0 :(得分:2)
这里的问题是,您不知道哪个请求会响应,因为您没有隔离您的上下文。 我们来解释一下:
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);
};
}
为避免这种情况,有两种良好做法:
- &GT;将您的循环更改为&#34; forEach&#39;
var requestUrl=[url1,url2,url3,url4,url5];
requestUrl.forEach(function(url) {
$http.get(url).success(response){
console.log(url '+' response);
};
}
- &GT;保持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);
}
答案 1 :(得分:0)
如果你这样做:
$http.get('/someUrl').
success(function(data, status, headers, config) {
// this callback will be called asynchronously
// when the response is available
}).
error(function(data, status, headers, config) {
// called asynchronously if an error occurs
// or server returns response with an error status.
});
从headers
,您可以获得Host
HTTP标头,并根据该标头进行比较。
答案 2 :(得分:0)
您可以通过多种方式处理您的具体问题,但它不太可能在更高级别上执行您可能尝试的操作。那说......
您有一系列要提取的网址。您也可以将响应存储在数组中,然后您就会知道哪个是:
var requestUrl = [url1,url2,url3,url4,url5];
var responses = [];
for (var i = 0; i < requestUrl.length; i++){
responses[i] = null;
$http.get(requestUrl[i]).success(function (response) {
responses[i] = response;
});
}
当然,您必须找到一种方法来进行最后的.success()
调用以执行您的console.log()
(或者您接下来要做的任何事情)。