【问题标题】:NodeJS clearTimeout() doesn't seem to work correctly?NodeJS clearTimeout() 似乎无法正常工作?
【发布时间】:2014-01-27 22:44:55
【问题描述】:

我有一个超时,它在运行太久后基本上会杀死进程,但这只是在那时还没有满足某个条件的情况下。如果我的情况受到打击,我正在使用clearTimeout() 清除超时,但似乎错误和进程终止仍然存在。

这是我的代码 sn-p;即使点击clearTimeout(),5 分钟后仍会打印出错误。

function poll(callback){
    var timeLimit = setTimeout(function(){
        if(log) log("Could not get a response from the command.", "error");
        process.exit(1);
    }, 300000);
    exec("some command", function(error, stdout, stderr){
        if(stdout){
            clearTimeout(timeLimit);
            // Do other stuff
        } else {
            setTimeout(function(){
                poll(callback);
            }, 1000);
        }
    });
}

我在浏览器中进行了测试,它似乎在典型的 JavaScript 控制台中工作,但也许我在上面做错了什么?

如果是这样,任何帮助将不胜感激。以上是我的确切代码(当然,除了命令和错误消息)所以如果有任何错误,它应该在上面可见。

提前致谢。

【问题讨论】:

  • 您能否提供一个实际示例,其中调用了回调,但未清除计时器?
  • 以上是我看到问题的代码,该命令是一个adb 命令,它一遍又一遍地运行,直到它收到一些输出。我不想在问题中混淆,因为我很确定该命令无关紧要,但是如果您认为它很重要,我可以添加。
  • 好吧,setTimeout/clearTimeout [可能] 没有在 node.js 中损坏;因此,两个不同的假设(持有上述断言)是 1)timeLimit 在调用 clearTimeout 之前设置为其他值,或者 2)clearTimeout 未按预期调用。 (因此,正如 Qantas 建议的那样,调试的下一步是排除这些可能性。)
  • 好的,我更新了我的确切代码。
  • 其实,呵呵。每次循环都会设置超时。

标签: javascript node.js timeout settimeout


【解决方案1】:

Bleh,深夜时刻。

setTimeout() 在轮询函数内部,因此每次轮询时都会重置,这意味着我无法清除旧实例。将它移到函数之外,它就可以正常工作了。

【讨论】:

    猜你喜欢
    • 2017-09-04
    • 2012-05-06
    • 2013-02-17
    • 2017-10-09
    • 2017-08-03
    • 2014-05-02
    • 2011-09-11
    • 2016-02-11
    • 1970-01-01
    相关资源
    最近更新 更多