Javascript 定时函数中的意外行为
我尝试计算两个日期之间的时间,如果计数器为0,则运行一些代码,这基本上可以正常工作。问题是什么时候应该运行代码,而不是什么时候。 例如: 这是休息时间Javascript 定时函数中的意外行为,javascript,node.js,timing,Javascript,Node.js,Timing,我尝试计算两个日期之间的时间,如果计数器为0,则运行一些代码,这基本上可以正常工作。问题是什么时候应该运行代码,而不是什么时候。 例如: 这是休息时间 setInterval(function() { eventCountDown(); }, 1 * 60 * 1000); 然后我从数据库中得到一些文本 function eventCountDown() { database.getNextEventDate(function(err, result) { if
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);
}
});
}
}
}
您可以添加一些console.log()来查看代码是否以及何时执行吗?@liorahaydonti添加了日志。不幸的是,目前它正在工作。我正在尝试将日期设置为几小时后,并检查是否有任何错误。但任何错误都会记录在控制台中。所以我会知道如果有什么不起作用。
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 }