如何在迭代到下一个索引之前运行整个函数(JavaScript)

时间:2018-12-28 18:49:12

标签: javascript loops asynchronous closures

我正在尝试运行一个函数,在该函数中,我会打开一个新的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);
}

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:-1)

您可以使用Asynch库,在其中可以找到很多方法,例如foreach。您可以串行或并行执行任务以同步运行任务,也可以使用限制为1的foreachlimit,其中单个任务将首先完成,然后下一次迭代开始。