我一直在阅读一些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中并得到执行...

  • 我现在更加困惑。它应该很简单,但我想以下问题对我来说是个好而简单的解释:
  • 上述哪一项是正确的?
  • 什么是EventLoop?比喻,带有方法,对象等的真实事物?
  • 如果我想从头开始实现与EventLoop类似的功能,它看起来如何简单?也许有些代码很高兴看到。
  • 最佳答案

    我将尝试根据MDN关于Event Loops的一些信息来回答。请注意,此答案仅适用于JavaScript,而不专门针对Node。

    从它的声音来看,困惑之处在于您的第二个引号可能应该写得更清楚,例如:



    如果是这样,那就更加一致了。触发时,所有回调将被输入FIFO队列,并按顺序运行。也就是说,如果一个事件正在触发,则下一个事件将在第一个事件完成之前触发。

    我上面链接的MDN引用甚至包括事件循环的伪代码:

    while(queue.waitForMessage()){
        queue.processNextMessage();
    }
    

    计时器和间隔在HTML规范中定义为DOM的一部分。在快速检查该规范时,找不到任何直接引用“Message Loop”的信息。

    07-24 19:53