SetInterval不适用于Nodejs中的异步任务

时间:2017-03-30 16:05:11

标签: javascript node.js express scheduled-tasks setinterval

我是nodejs的新手。我已经实现了简单的异步任务,它应该每10分钟运行一次。这里设置Interval函数应该每隔x分钟运行一次,并且应该更新变量api key的值。我不知道它里面缺少什么。

任何人都可以让我知道我哪里出错了。

var  csgTokenFile= rfr('models/csg-token-gen');
var apiKey;

setInterval(function(req, res) {
    csgTokenFile.key(function(messages) {
          console.log("key: ",messages);
          apiKey = messages;
    })
}, 20000);

1 个答案:

答案 0 :(得分:0)

您的代码存在一些问题,修复后可以帮助您找到真正的问题 - 在csgTokenFile.key()函数,调用或预期行为中。

首先,传递给setInterval()的函数中的参数没有任何意义,因为无论如何它都将被调用而没有参数。你还没有在这里使用它们,但它们的存在并不是一个好兆头,因为你似乎对它的运作方式感到困惑。

而不是:

setInterval(function (req, res) {
    // ...
}, 20000);

使用它:

setInterval(function () {
    // ...
}, 20000);

或者这个,因为你还没有使用this

setInterval(() => {
    // ...
}, 20000);

现在,函数csgTokenFile.key()的接口和实现仍然是个谜(这是问题中最重要的问题来源,因为它是功能不能正常工作或者是其他代码没有正确使用该功能 - 如果不查看csgTokenFile.key()的源代码也无法判断 - rfr()函数是一个谜,可能与此相关)但它看起来可能是遵循错误优先回调的Node约定,在这种情况下,它会将错误作为回调的第一个参数传递,将实际数据传递给第二个参数。

如果csgTokenFile.key()采用传统的Node风格回调,那么它应该像这样使用:

setInterval(() => {
    csgTokenFile.key((error, messages) => {
        if (error) {
            return console.log('Error:', error);
        }
        console.log("key: ", messages);
        apiKey = messages;
    })
}, 20000);

但如上所述,从你的问题中无法判断。这只是一个暗示。