我试图每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循环中返回相同的值。有没有办法解决这个问题?
答案 0 :(得分:0)
编写这样一个无限循环不是一个好主意,因为这会阻止事件循环,并且不允许任何其他循环运行。
我建议使用类似https://gist.github.com/tanepiper/4215634
的内容由于它提到的是NodeJs,你可以使用一些已经解决了计时器不准确的npm模块。例如https://github.com/aduth/correctingInterval或https://github.com/klyngbaek/accurate-interval