早安,
我正在尝试将数据与Tour_id和每个单独的media_id(我从其他地方获取的station_id)一起放入表中,订单号让我很头疼:我正在尝试为每个站点为我发布的每种媒体分配一个编号。
例如:站1有2种媒体站点2有3
然后,odernumbers应该像这样:0,0,1,1,1,1
目前我正在使用以下代码:
for(var i = 0; i < this.currentStations.length; i++){
this.http.get("http://localhost:3000/mediasforstation/" + this.currentStations[i].id).subscribe((res) => {
medias = res;
for (var j = 0; j < medias.length; j++){
this.http.post("http://localhost:3000/posttourstations",
{"tour_id": id, "media_id": medias[j].id, "ordernumber": i}).subscribe(function(res) {
console.log(res);
}.bind(this));
}
});
}
一切正常,但订单号有效,但是订单号始终占用所涉及的站点数,在我们上面的示例中为2。
我该如何解决?
非常感谢您的帮助。
据我了解,您需要保留索引值。变量i
的类型为var
,即function scoped
。在外部循环中,您正在调用一个返回一些响应的API,同时i
的值已更新,并且对于下一个索引/计数器,该API调用已发送。当您从API调用获得响应时,您将获得调用了外部循环的i
的值。
换句话说,您需要了解var
和let
之间的区别。您的问题可以通过替换
for(var i=0;...)
with
for(let i=0;...)
这里为您提供示例代码。
//block scoped - retains value of i
for (let i=0;i<10;i++){
this.http.get('https://jsonplaceholder.typicode.com/users').subscribe(res=>{
for(var j=0;j<5;j++){
console.log(`i=>${i}`)
}
})
}
//function scoped - gets updated value of i
for (var i=0;i<10;i++){
http.get('https://jsonplaceholder.typicode.com/users').subscribe(res=>{
for(var j=0;j<5;j++){
console.log(`i=>${i}`)
}
})
}