计时功能异常

时间:2018-07-13 12:23:17

标签: javascript node.js timing

我尝试计算2个日期之间的时间,如果计数器为0,则运行一些代码,这基本上可以正常工作。问题是应该何时运行代码,而不是。 例如:

这是间隔

setInterval(function() {
    eventCountDown();
}, 1 * 60 * 1000);

然后我从数据库中获取一些文本。

function eventCountDown() {
    database.getNextEventDate(function(err, result) {
        if (!err) {
            calcEventDate(result[0]['event_start'], result[0]['event_end'], result[0]['id']);
        }
    });
}

我在这里计算日期并更新数据库

function calcEventDate(dt, edt, id) {
if (new Date(dt) - new Date() >= 0 && new Date(dt) - new Date() < new Date(edt) - new Date()) {
    dt = new Date(dt);
    var n = new Date();
    var dst = dt - n;

    var d = Math.floor(dst / (1000 * 60 * 60 * 24));
    var h = Math.floor((dst % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
    var m = Math.floor((dst % (1000 * 60 * 60)) / (1000 * 60));
    var s = Math.floor((dst % (1000 * 60)) / 1000);

    if (d == 1 && h == 0 && m == 0) {
        sendMessageToEventChat("initial_message", id);
    } else if (d == 0 && h == 0 && m == 0) {
        //This part is not working fine
        database.updateEventStatus(id, "RUNNING", function(err, result) {
            if (!err) {
                sendMessageToEventChat("start", id);
                initEvent(id);
            }
        });

    }
} 
}

正如已经提到的...有效。但是有时它不会更新数据库端而不发送消息。没有错误,也没有警告。我觉得d == 0 && h == 0 && m == 0

一定有误

我刚刚注意到那些功能可能没有被调用过。除了这个间隔,我还有3个。一个是每秒检查一次,但是由于间隔2每2分钟执行一次并更新全局变量,因此不访问数据库。间隔3每15分钟运行一次。所以这不应该是问题。

函数与数据库交互的执行时间是否太长?但是nodejs仍然应该运行其他功能,对吧?

感谢您的帮助。

编辑,添加日志

console.log(new Date(dt) - new Date() >= 0 && new Date(dt) - new Date() < new Date(edt) - new Date());
console.log(d + "D " + h + "H " + m + "M " + s + "S");
console.log(err); //Error from updating event status
console.log(result); // Result form updating event status

true
0D 0H 0M 19S
null
OkPacket {
  fieldCount: 0,
  affectedRows: 1,
  insertId: 0,
  serverStatus: 2,
  warningCount: 0,
  message: '(Rows matched: 1  Changed: 1  Warnings: 0',
  protocol41: true,
  changedRows: 1 }

0 个答案:

没有答案