while循环没有在node.js中获得更新的全局变量

时间:2018-02-25 03:29:28

标签: javascript node.js momentjs infinite-loop

我试图每5秒将数据保存到一个数组。首先,我尝试了这个:

setInterval(function() { 
    data.push({
        price: getCurrentPrice(),
        time: moment().format()
    })
}, 5000);

运行了30分钟之后,setInterval方法滑了1秒,这对我的用例来说是不能容忍的,所以我尝试了一些不同的使用moment.js库:

while(true){
    if(moment().diff(lastSaveTime, 'seconds')==5){
        lastSaveTime = moment();
        data.push({
            price: getCurrentPrice(),
            time: lastSaveTime.format()
        })
    }
}

在无限循环中,如果最后一次数据保存时间早于5秒,则保存数据。这很有效,但是有一个问题:

while循环不会获取getCurrentPrice()应该返回的更新值。它在无限while循环中返回相同的值。有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:0)

编写这样一个无限循环不是一个好主意,因为这会阻止事件循环,并且不允许任何其他循环运行。

我建议使用类似https://gist.github.com/tanepiper/4215634

的内容

由于它提到的是NodeJs,你可以使用一些已经解决了计时器不准确的npm模块。例如https://github.com/aduth/correctingIntervalhttps://github.com/klyngbaek/accurate-interval