我有一个带有任何参数的数组,例如:let EveryTen = ['a,'b','c'],我需要每5分钟对数组中的每个parameter(3)执行一个函数。

我尝试使用此代码,但5分钟后立即运行所有内容

  EveryTen.forEach(element => {
    setDelay(element)
  });


const setDelay = (element) => {
   setTimeout(function(){
     UpdateDataPost(element); //Function A
     UpdateDataBasic(element); //Function B
   }, 60 * 5 * 1000);
}


你能帮我吗?

最佳答案

这是setInterval的一个好用例,我们只需定义它在(5分钟)处运行的时间间隔,并将其添加到事件循环中即可。知道了这一点,我们可以使用计数器来跟踪传递的间隔数,从而采取一些不同的方法,这使我们能够处理每个存储桶。

然后,一旦间隔数达到GTE数组的长度,我们就知道所有数组都已处理,可以清除间隔以阻止其继续。

const everyTen = ['a', 'b', 'c'];

const updateDataPost = (data) => {
  console.log(`updateDataPost ${data}`);
};

const updateDataBasic = (data) => {
  console.log(`updateDataBasic ${data}`);
};

let intervalsPassed = 0;

const interval = setInterval(() => {
  const currentBucket = everyTen[intervalsPassed++];
  updateDataPost(currentBucket);
  updateDataBasic(currentBucket);
  if (intervalsPassed >= everyTen.length) {
    console.log('no more buckets, stopping interval')
    clearInterval(interval);
  }
}, 1000 * 60 * 5);


输出:

"updateDataPost a"
"updateDataBasic a"

"updateDataPost b"
"updateDataBasic b"

"updateDataPost c"
"updateDataBasic c"


这是一个可使用的JS容器,我将设置为5秒以使其更快地测试https://jsbin.com/fafewelufi/edit?js,console

关于javascript - 如何在JavaScript中每5分钟调用一次函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52193889/

10-11 04:43