nodejs:用于自定义函数的setInterval

时间:2018-08-15 09:48:11

标签: node.js setinterval intervals

我具有以下功能:

getHostlist() {
        fs.readFile('out/hostlist', 'utf8', (err, data) => {
        if (err) throw err;

        var hostlist = data.split(',');
        this.getHostStats(hostlist);
    });
},

它已导出。

在我的index.js中,我试图每分钟用setInterval调用它: setInterval(remote.getHostlist, config.app.refresh);第二个参数包含60000。

所以我尝试每分钟运行一次。

但是当它运行时收到以下错误: TypeError: this.getHostStats is not a function

但是当我没有间隔地手动运行该函数时,它将起作用,并且会调用getHostStats

问题出在哪里??

编辑完整导出脚本:

module.exports = {
getHostlist() {
    console.log("Starting Usage synchronization at " + currTime());
    fs.readFile('out/hostlist', 'utf8', (err, data) => {
        if (err) throw err;

        var hostlist = data.split(',');
        getHostStats(hostlist);
    });
},
....
}

如果我在这里写下所有内容,那将太长了。

2 个答案:

答案 0 :(得分:0)

我相信在这种情况下,“ this”指的是setInterval代码运行的任何位置,因此“ this”不再是远程的。尝试获取对remote.getHoststats的明确引用,并改用它。

//编辑1 // 可能需要将导出函数包装到一个类中,创建该类的对象,然后导出该对象。那应该保证“ this”在您的上下文中有效

答案 1 :(得分:0)

尝试

module.exports = {
getHostlist : function getHostlist() {
    console.log("Starting Usage synchronization at " + currTime());
        fs.readFile('out/hostlist', 'utf8', (err, data) => {
          if (err) throw err;

         var hostlist = data.split(',');
         getHostStats(hostlist);
     });
  }
}

这可以解决您的问题