我打算每分钟从服务器获取数据。但是,如果我运行此代码,则会重复调用此函数。另一方面,如果我在条件中添加了date.getMilliseconds == 0
,它将不会处理任何结果。
您是否对每1分钟运行一次功能有任何建议?
async update() {
var date = new Date();
if (date.getSeconds() == 0) {
var newdata = await getData(1);
array.shift();
array.push(newdata);
}
}
答案 0 :(得分:1)
由于似乎您无法精确控制何时调用update
,因此一种选择是每次true
都将布尔值设置为getSeconds() === 0
(将其设置为{ {1}}除外),然后仅在标志为false
和 false
时运行真实代码:
getSeconds() === 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);
}
}
而可能需要较少资源的替代方法是具有一个 separate 函数来切换布尔值,并设置一个Date
每60秒运行一次,不涉及setInterval
:
Date
(当然,如果框架允许,您也可以尝试let hasRun = false;
setInterval(() => hasRun = false, 60000);
async update() {
if (hasRun) return;
hasRun = true;
// your code
}
)