第一个控制台日志:0,正如预期的那样。 第二个控制台日志:1。 为什么索引在循环结束前递增?
for (var i = 0; i < this.offlineTimeSlots.length; i++) {
console.log(i);
this.http.post('http://localhost:63203/api', JSON.stringify(this.offlineTimeSlots[i]), { headers: headers })
.map(res => res.json())
.subscribe(data => {
console.log(i);
resolve(data);
}, (err) => {
reject(err);
});
}
答案 0 :(得分:1)
当您在for循环中进行操作时,基本上您正在生成this.offlineTimeSlots.length
个http请求(异步)。根据循环的长度,通常for循环几乎每次都在http请求之前完成循环。
看一下这个例子:
for(var i = 0; i < 10; i++){
console.log(i);
setTimeout(()=>{
console.log(i);
},2000);
}
这将打印0到10之间的数字(不包括10个),然后打印10次,十次。原因是您在循环时创建10(循环的长度)异步请求。由于for循环将在2秒内完成遍历,i
将在setTimeout
开始时为9 + 1(后增量)。
答案 1 :(得分:0)