【问题标题】:How to trigger timeout function in Node.js?如何在 Node.js 中触发超时功能?
【发布时间】:2023-03-05 01:50:05
【问题描述】:

我想触发setTimeout回调函数,但是好像不行。有什么问题?

var fs = require("fs");

// set timeout callback
setTimeout(function(){
    console.log("5000ms timeout");
    process.exit(0);
}, 5000 );

// do something more than 5000ms
while(true) {
    var stats = fs.statSync("foo");
    console.log("while statement running...");
}

当我运行这个,5s后,程序还在运行

【问题讨论】:

    标签: node.js settimeout


    【解决方案1】:

    while(true) 是一个紧密的自旋循环,可防止任何其他异步回调触发。不要在单线程环境中执行此操作。你可以使用setInterval 来代替while(true)

    【讨论】:

    • 也就是说,我不能使用setTimeout来打破while语句?
    • 当我使用 setInterval 替换 while(true) 时,它可以工作。所以我想知道While(true) 是原子的,我们不能用setTimeout 打破它?
    【解决方案2】:

    Javascript 是严格的单线程的。 (工人除外)

    只要您的 while 循环正在运行,就没有其他 Javascript 代码可以执行,包括您的 setTimeout 回调。

    相比之下,调用setInterval 只是安排一个回调定期运行,但不会在此期间阻塞线程。

    【讨论】:

      【解决方案3】:

      我不熟悉 node.js,但我通常希望 while 循环继续运行。 JS 阻塞。为了停止该循环,它的条件需要评估为假。在循环停止之前,不会执行任何其他操作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-04
        • 2022-07-06
        • 1970-01-01
        • 2013-04-11
        • 1970-01-01
        相关资源
        最近更新 更多