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

10-06 05:10