我有此代码:
console.log('1');
process.nextTick(() => console.log('inside nextTick'));
setImmediate(()=> console.log('inside setImmediate'));
console.log("2");
for(var i=0;i<1 ; i++) {
console.log("inside for loop");
}
输出为:
1
2
inside for loop
inside nextTick
inside setImmediate
请解释为什么会这样。即使我在console.log("2");
和for loop
之后写了process.nextTick
和setImmediate
,为什么还要在它们之前执行?
答案 0 :(得分:2)
这就是异步代码在JavaScript中的工作方式。安排异步代码时,会将其添加到事件队列中。这由主事件循环处理,仅在同步代码返回时才获得控制。因此,所有同步代码都运行,记录所有这些消息,然后返回到主事件循环,该主事件循环调用所有异步任务。
答案 1 :(得分:0)
ex:
console.log("Hello");
setTimeout(function(){ console.log("Susi");},2000);
console.log("Iam");
o/p: Hello, Iam susi.
在您的示例中,它将首先打印控制台语句,因为process.next将在事件循环的下一个迭代中执行,然后执行setimmediate。由于您得到的输出如下。
1
2
inside for loop
inside nextTick
inside setImmediate