在将值传递给包含的函数之前,以时间间隔循环迭代

Loop iteration with time interval before passing value to included function

我正在尝试弄清楚如何在 Ionic TypeScript 应用程序的循环迭代中为函数设置超时。

setInterval 使无限重复调用函数的时间间隔相等:

   setInterval(() => {
      this.myFunc1(val);
   }, 800);
如果按顺序列出,

setTimeout 给出所需的结果:

   setTimeout(() => {
      this.myFunc1(val);
   }, 800); 

   setTimeout(() => {
      this.myFunc1(val);
   }, 1200); 

但是如何通过更新的列表以时间间隔循环并等待将第二个值 val 传递给函数,或者在上一次迭代完成时调用 myFunc1

 async myFunc2() {
    for (let val of this.myValueList) {
        /// wait for 5 sec or wait for finishing process, then pass value calling function:  
        this.myFunc1(val);          
    }
  }

等待大约 5 秒的最简单解决方案:

const wait = t => new Promise(r => setTimeout(r, t));

然后在您的代码中您可以这样做:

async myFunc2() {
    for (let val of this.myValueList) {
        await wait(5000);
        this.myFunc1(val);
    }
}

如果 myFunc1 是异步的,而您只想等待它完成执行后再继续循环,那么您只需执行:

async myFunc2() {
    for (let val of this.myValueList) {
        await this.myFunc1(val);
    }
}

setInterval is the correct choice here. What's missing is that you need to clear the interval. setInterval returns an id that you can pass to clearInterval 停止迭代。

这里我正在将数据传递给 console.log,等待一秒钟,然后重复直到完成。

const myValueList = [5,6,7,8,9,10];

let i = 0;
const id = setInterval(() => {
  console.log(myValueList[i++]);
  if (i === myValueList.length) {
    clearInterval(id);
    console.log("done!");
  }
}, 1000);