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

标签 javascript node.js multithreading

下面的代码是一个nodeJS代码。我是 nodeJS 的新手,我对 nodejs 中的代码流很困惑,因为它告诉我 nodejs 是单线程的,另一方面它也告诉我们回调和 IO 是异步的,如果我没记错的话。谁能告诉我回调的实际含义以及代码是如何工作的。是不是我们作为回调调用的异步函数是由其他线程/进程执行的,而不是由单个 nodejs 线程执行的(PS-这是我理解的概念......我可能错了),那么为什么我们r 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 代码在事件循环至少 5 秒后执行。

关于javascript - 无法理解 NodeJS 中的一些基本逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33984536/

相关文章:

javascript - 可恢复的 Youtube uploader 如何工作?

javascript - Github Electron : A JavaScript error occured in the browser process

node.js - 根据 azure 搜索的分数计算相似度百分比

javascript - 如何在匿名函数中引用并分配给全局变量?

java - 使用主线程读取文件并使用多线程和ExecutorService处理数据

javascript - 有没有办法显示与用户输入不匹配的数据列表选项?

javascript - 使用 grunt 从 browserify 生成源映射

javascript - 无法读取我的 API 或特定 API [React.js/Node.js/Axios/Fetch]

java - 按需唤醒 hibernate 线程

java - 为什么线程只运行一次?