我打算每分钟从服务器获取数据。但是,如果我运行此代码,则会重复调用此函数。另一方面,如果我在条件中添加了date.getMilliseconds == 0,它将不会处理任何结果。
您是否对每1分钟运行一次功能有任何建议?

async update() {
 var date = new Date();
 if (date.getSeconds() == 0) {
   var newdata = await getData(1);
   array.shift();
   array.push(newdata);
  }
}

最佳答案

由于看起来您对何时调用update没有很好的控制,因此一种选择是每次true都将布尔值设置为getSeconds() === 0(否则将其设置为false),然后仅运行标记为falsegetSeconds() === 0时的真实代码:

let hasRun = false;
// ...
async update() {
 var date = new Date();
 const secs = date.getSeconds();
 if (secs !== 0) {
   hasRun = false;
 } else if (secs === 0 && hasRun === false) {
   hasRun = true;
   // your code
   var newdata = await getData(1);
   array.shift();
   array.push(newdata);
  }
}


由于不每帧都不创建Date,因此可能需要较少资源的替代方法是具有一个单独的函数来切换布尔值,并设置为每60秒运行一次setInterval的布尔值,而无需涉及Date

let hasRun = false;
setInterval(() => hasRun = false, 60000);
async update() {
  if (hasRun) return;
  hasRun = true;
  // your code
}


(当然,如果框架允许,您也可以尝试setInterval(update, 60000)

09-25 17:50