nodejs计时器无法正常工作

时间:2016-10-27 20:25:30

标签: javascript node.js timer socket.io

function a(&$b) { $b = 1; }

$x = 0;
a($x);
echo $x; // echos 1, because a reference to $x was changed

我在node.js文件中有这组代码。当我运行控制台计时器时,它有时无法正常工作。当我首先运行代码时,它每2秒增加一次计数1。当我停下来然后再次跑步时,它开始随机时间在1秒钟内增加一些时间,在2秒内增加一些时间,在三秒内增加,依此类推。像这样1 --- 1秒延迟,2 ---- 1秒延迟,3 ---- 2秒延迟,4 --- 3秒延迟。我的代码怎么了?

1 个答案:

答案 0 :(得分:0)

由于它是异步的,你可以在完成后控制进程等等。

当你这样做时,Sequelize会自动连接到db:

var sequelize = new Sequelize('connection string');

authenticate只需SELECT 1+1 AS result即可查看是否可以使用返回承诺的连接。

所以承诺将err作为结果 - 这表明连接出了问题。

de-synchronization的问题可能是网络,数据库性能/业务以及许多其他因素。为了避免这种情况,您需要控制日程安排。

所以简单地这样做:

var async = require('async'); // npm i --save async

// creating custom object in sequelize object to track connection
sequelize.databaseConnectionStatus = {
  connected: true, 
  status: 'online', 
  lastError: ''
}; 
async
  .forever(function(next) {
    sequelize
      .authenticate()
      .then(function(err) {
        sequelize.databaseConnectionStatus.connected = (err) ? false : true;
        sequelize.databaseConnectionStatus.status = (err) ? 'offline' : 'online';
        sequelize.databaseConnectionStatus.lastError = err;
        if(err) console.error(err);

        setTimeout(next, 5000); // running check every 5 seconds
      });
  });

var count=0;
setInterval(function() { // independent loop to read connection status and emit by socket
    count++;
    socket.emit("cloud_database_status", sequelize.databaseConnectionStatus.status);
}, 2000);