我尝试计算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 }