提问人:Help Me Nothing 提问时间:12/29/2018 更新时间:12/29/2018 访问量:109
如何在迭代到下一个索引之前运行整个函数 (JavaScript)
How to run a whole function before iterating to the next index (JavaScript)
问:
我正在尝试运行一个函数,在该函数中打开一个 url 的新窗口并在 1.5 秒后关闭新窗口。我正在尝试循环并执行此 3 次。但是,代码会同时打开所有三个新窗口,然后执行超时。我希望下一个窗口仅在前一个窗口关闭后打开。
function test(url){
let a = window.open(url);
a.focus();
setTimeout(()=>{
a.close();
}, 1500);
};
const repl = 'mysite.com';
for(let i = 0; i < 3; i++){
test(repl);
}
答:
1赞
iagowp
12/29/2018
#1
如果您希望一个在另一个之后运行,当另一个完成后,调用下一个。例如,像这样的东西
const reps = 3;
let i = 0;
function test(url){
let a = window.open(url);
a.focus();
setTimeout(()=>{
a.close();
i++;
if (i < 3) {
test(url);
}
}, 1500);
};
const repl = 'mysite.com';
test(repl);
评论
0赞
Help Me Nothing
12/29/2018
有没有办法使用 For 循环语法,或者我最好检查一下 Async / Await、Promise 或 Callbacks?无论如何,很棒的代码!这行得通 💖
0赞
Taplar
12/29/2018
for 循环与处理异步逻辑不兼容。@GodComplex
0赞
iagowp
12/29/2018
@GodComplex 如果您位于异步函数中,并且您的函数返回了 promise,则可以使用 for 循环语法。因此,当这个承诺得到解决时,你就会进入下一个迭代
0赞
Lennholm
12/29/2018
@Taplar 这是在使用 时,所以@GodComplex是的,强烈建议您查看async-await
async-await
-1赞
Amit Chowdhury
12/29/2018
#2
您可以使用异步库,在那里您可以找到许多方法,例如 foreach,every。您可以串联和并行执行任务以同步运行任务,您可以使用限制为 1 的 foreachlimit,其中将首先完成单个任务,然后开始下一次迭代。
评论
0赞
stealththeninja
12/29/2018
你有例子吗?为什么这里需要图书馆或图书馆是有益的?
评论
function test(url, onClosed) { ... setTimeout(() => { a.close(); onClosed(); } }
test