为什么索引会像这样增加? JavaScript的

时间:2017-06-13 06:27:53

标签: javascript angular typescript

第一个控制台日志: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);
            });
        }

2 个答案:

答案 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(后增量)。

来源小提琴:https://jsfiddle.net/echonax/c9p4e19o/

答案 1 :(得分:0)

this.http.post是异步函数,因此它将单独执行

For循环将继续执行,并不取决于this.http.post

概念称为事件循环:Please read this