运行 异步函数每分钟一次

running async function once every minute

我打算每分钟从服务器获取一个数据。但是,如果我运行这段代码,这个函数就会被重复调用。另一方面,如果我在条件中添加 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,因此一种选择是每次 getSeconds() === 0 时都将布尔值设置为 true(设置它到 false 否则),然后只有 运行 当标志是 false and getSeconds() === 0:[=22= 时的真实代码]

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); 
  }
}

另一种方法可能需要更少的资源,因为不是每帧都创建 Dates,所以有一个 separate 函数来切换布尔值,用 setInterval 每 60 秒 运行s,不涉及 Dates:

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

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