在javascript中处理多个响应

时间:2015-02-04 05:40:25

标签: javascript json angularjs http

您好我正在使用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);
      };
 }

3 个答案:

答案 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()(或者您接下来要做的任何事情)。