angular 2 for i= always 20 帮帮我,这里有什么问题吗?

angular 2 for i= always 20 help me guys whats wrong here?

你可以在这里看到我的代码 console.log(parti+" "+ i);我总是 return 20 我的代码有什么问题只是告诉我我看不到。谢谢。

        for(var i=0;i<=20;i++){
          this.http.get("https://tr1.api.riotgames.com/lol/match/v3/matches/"+data.matches[i].gameId+"?api_key="+this.apikey).map(res=> res.json()).subscribe(data => {
for(var c=0;c<=9;c++){
  if  (data.participantIdentities[c].player.summonerName.toUpperCase().replace(/\s/g, '')==ev.toUpperCase().replace(/\s/g, '')){
    var parti=data.participantIdentities[c].participantId;
console.log(parti+" "+ i);

console.log(data.participants[parti-1].stats.win)

this.virtual.push({gameid: this.matches[i].gameId , champion: this.matches[i].champion,time : this.matches[i].timestamp,win:data.participants[parti-1].stats.win}) ;

}
  
}
console.log(data);

  });
        }

当来自 GET 调用的数据到达时,您的回调函数将被调用。 然而,这是在您的代码(包括循环)具有 运行 之后,因此 i 的值为 20。 解决这个问题的最简单方法是从外部循环调用一个单独的函数并传入当前索引。 该函数将捕获该值作为参数,当您的回调 运行.

时,该参数将在范围内

for(var i=0;i<=20;i++) {
    getData(i);
 }

function getData(i) {
  this.http.get("https://tr1.api.riotgames.com/lol/match/v3/matches/"+data.matches[i].gameId+"?api_key="+this.apikey).map(res=> res.json()).subscribe(data => {
for(var c=0;c<=9;c++){
  if  (data.participantIdentities[c].player.summonerName.toUpperCase().replace(/\s/g, '')==ev.toUpperCase().replace(/\s/g, '')){
    var parti=data.participantIdentities[c].participantId;
console.log(parti+" "+ i);

console.log(data.participants[parti-1].stats.win)

this.virtual.push({gameid: this.matches[i].gameId , champion: this.matches[i].champion,time : this.matches[i].timestamp,win:data.participants[parti-1].stats.win}) ;

}
}

类似的东西。