无法理解NodeJS中的一些基本逻辑

下面的代码是一个nodeJS代码。 我是nodeJS的新手,我很困惑于nodejs中的代码stream,因为它告诉我们nodejs是单线程的,另一方面它也告诉我们,如果我没有错,那么callback和IO是asynchronous的。 任何人都可以给我callback的实际含义以及代码是如何工作的。 是这样,我们称为callback的asynchronous函数是由其他线程/进程执行,而不是由单个nodejs线程(PS-这是我理解的概念…我可能会出错),那么为什么我们将callng nodejs作为单线程程序。

function placeOrder(orderNo) { setTimeout(function() { deliver(orderNo); }, 5000); console.log("Order is: " + orderNo); } function deliver(orderNo) { console.log("Item is delivered with Order No.- " + orderNo); } placeOrder(1); placeOrder(2); placeOrder(3); placeOrder(4); placeOrder(5); placeOrder(6); 

Nodejs是单线程的。 有一个连续运行的事件循环,并执行它必须执行的任何指令。 所以基本上当你用5秒间隔的setTimeout函数的时候,它会在5秒后放置一些由事件循环执行的代码。 当然,如果事件循环正忙于执行一些其他的代码,那么这个代码将在稍后阶段推迟执行。 所以它可能不会在5秒后执行,而是在5.1秒后执行。

所以当你调用setTimeout(function() { ... }, 5000); 您正在安排一些JavaScript代码,以便在事件循环后至less5秒后执行。

asynchronous与multithreading不一样。 在上面的例子中,你要求asynchronouscallback,但是你的单线程在它没有运行其他代码的时候会监听这些callback。 callback都回到了请求他们的同一个线程。

因此,您不会同时运行两个deliverfunction。 如果你在deliversleep ,其他callback将不得不等待。 这就是为什么在这样的单线程环境中,重要的是快速完成工作并返回(到浏览器或节点),以便事件循环可以继续在同一个线程上监听更多的callback。