我一直在阅读一些NodeJs文章,以了解它的异步特性,在此期间我发现了它并且非常喜欢它Node.js, Doctor’s Offices and Fast Food Restaurants – Understanding Event-driven Programming
有一个叫做EventLoop
的东西,它是基于FIFO的队列。他们说,当异步函数被命中时,它将被放到EventLoop中,并将在那里继续执行。
我在这里有点困惑。例如,说here:
在同一篇文章中:
但这不同于此图像:
让我们看下面的例子:
console.log("Hello,");
setTimeout(function(){console.log("World");},0);
因此,根据我从这些不同的解释中所了解的,
function(){console.log("World");}
函数的setTimeout()
部分,即回调,将放在EventLoop中。 setTimeout
完成后,它也会执行EventLoop
。 setTimeout(function(){console.log("World");},0);
都将放入EventLoop中并得到执行... 我现在更加困惑。它应该很简单,但我想以下问题对我来说是个好而简单的解释:
最佳答案
我将尝试根据MDN关于Event Loops的一些信息来回答。请注意,此答案仅适用于JavaScript,而不专门针对Node。
从它的声音来看,困惑之处在于您的第二个引号可能应该写得更清楚,例如:
如果是这样,那就更加一致了。触发时,所有回调将被输入FIFO队列,并按顺序运行。也就是说,如果一个事件正在触发,则下一个事件将在第一个事件完成之前触发。
我上面链接的MDN引用甚至包括事件循环的伪代码:
while(queue.waitForMessage()){
queue.processNextMessage();
}
计时器和间隔在HTML规范中定义为DOM的一部分。在快速检查该规范时,找不到任何直接引用“Message Loop”的信息。