【发布时间】: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