在将值传递给包含的函数之前,以时间间隔循环迭代
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);
我正在尝试弄清楚如何在 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);