上次犯了一个完整的白痴错误,所以这次仔细检查。以下是代码段:
var os = require('os');
var hostName = os.hostname();
var hostPlatform = os.platform();
var hostArch = os.arch();
var hostRelease = os.release();
function collectNow(){
var hostInfo = {
name : hostName,
platform : hostPlatform,
arch : hostArch,
release : hostRelease,
hostUptime : os.uptime(),
hostTotalMem : os.totalmem(),
hostFreeMem : os.freemem()
};
return hostInfo;
}
function monConnect(delay){
console.log(JSON.stringify(collectNow()));
console.log(delay); // printing output making sure it is 10000
setTimeout(monConnect,delay);
}
monConnect(10000);
此代码在第一次打印后等待大约10秒,然后在无限循环中保持在json上方打印而不等待,并且未定义延迟值。
答案 0 :(得分:3)
delay
时, monConnect
未通过。你需要:
setTimeout(function () { monConnect(delay); }, delay);
请注意,为了每delay
毫秒运行一个函数,您可以使用setInterval
:
setInterval(fn, delay);
如果fn
运行时间超过delay
毫秒,则可能会失败,但是您的功能不应该花费那么长的时间来运行。
答案 1 :(得分:3)
当你这样做时
setTimeout(monConnect,delay);
monConnect
毫秒后将调用 delay
。但是,由于monConnect
未传递任何值,因此delay
为undefined
(默认值)。
要解决此问题,您可以将实际参数传递给传递给setTimeout
的函数,就像这样
setTimeout(monConnect, delay, delay);
现在,传递给setTimeout
的第二个参数将是实际的时间延迟,之后应调用monConnect
。第三个参数是在超时后调用时传递给monConnect
的参数。
答案 2 :(得分:1)
只需修好这一个电话:
setTimeout(monConnect(delay), delay);