在 for 循环中调用带参数的 javascript 函数:有没有办法暂停循环?
Calling a javascript function with parameters in a for loop: is there a way to pause the loop?
我有一组数据值,需要重复调用一个 javascript 函数,其中一个接一个地作为参数。所以我正在做一个非常简单的 for 循环。我的问题:我需要暂停循环的每个步骤的执行一秒钟,但我不知道该怎么做。
我已经摆弄过 setTimeout(),但这只适用于整个函数,不适用于 for 循环的一次迭代。有没有办法在下一次迭代之前暂停 for 循环的执行?
Is there a way to pause the execution of the for-loop before the next iteration?
不在正常功能中,不。代替 for
循环,您处理第一次迭代的代码,然后使用 setTimeout
安排下一次迭代,重复直到完成。搜索“setTimeout
循环”将为您找到许多示例。
在 async
函数中,如果您给自己一个支持 promise 的 setTimeout
版本,则可以使用 for
:
const delay = (ms, ...args) => new Promise(resolve => setTimeout(resolve, ms, ...args);
// ...
for (let i = whatever; i < whateverElse; i += something) {
// Do the thing, then
await delay(1000);
}
有关 async
函数的更多信息 on MDN。
编辑:你有没有编辑问题之类的,我读它是迭代然后在中间随机暂停,而不是每次迭代 1 秒
const arr = [1, 2, 3, 4, 5, 6];
function* iterateArr () {
for (var i = 0; i < arr.length; i++) {
console.log(`Number ${i}`)
yield arr[i];
}
}
let iterate = iterateArr();
let c = 0;
while (c < 4) {
console.log(iterate.next());
c++;
}
console.log("OTHER CODE");
console.log(iterate.next());
我有一组数据值,需要重复调用一个 javascript 函数,其中一个接一个地作为参数。所以我正在做一个非常简单的 for 循环。我的问题:我需要暂停循环的每个步骤的执行一秒钟,但我不知道该怎么做。 我已经摆弄过 setTimeout(),但这只适用于整个函数,不适用于 for 循环的一次迭代。有没有办法在下一次迭代之前暂停 for 循环的执行?
Is there a way to pause the execution of the for-loop before the next iteration?
不在正常功能中,不。代替 for
循环,您处理第一次迭代的代码,然后使用 setTimeout
安排下一次迭代,重复直到完成。搜索“setTimeout
循环”将为您找到许多示例。
在 async
函数中,如果您给自己一个支持 promise 的 setTimeout
版本,则可以使用 for
:
const delay = (ms, ...args) => new Promise(resolve => setTimeout(resolve, ms, ...args);
// ...
for (let i = whatever; i < whateverElse; i += something) {
// Do the thing, then
await delay(1000);
}
有关 async
函数的更多信息 on MDN。
编辑:你有没有编辑问题之类的,我读它是迭代然后在中间随机暂停,而不是每次迭代 1 秒
const arr = [1, 2, 3, 4, 5, 6];
function* iterateArr () {
for (var i = 0; i < arr.length; i++) {
console.log(`Number ${i}`)
yield arr[i];
}
}
let iterate = iterateArr();
let c = 0;
while (c < 4) {
console.log(iterate.next());
c++;
}
console.log("OTHER CODE");
console.log(iterate.next());