繁体   English   中英

如何在For循环中使用带有超时的Promise?

[英]How to use promises with timeouts in a for loop?

我很少有应循环并延迟执行的功能。 这是我的代码:

function func1() {
  for (var i = 0; i < 3; i++) {
    func2().then(); // await in loop until func2() completed       
  }
}

function func2() {
  return new Promise(succes) {
    for (var i = 0; i < 10; i++) {
      function3().then(); //wait untill function3 and then continue looping
    }
    success();
  }
}

function function3() {
  return new Promise(function(ready) {
    setTimeout(function() {
      // do some stuff
      ready();
    }, 2000);
  });
}

但这是行不通的。 我应该改变什么?

我认为您打算使用的是ES8(ES2017) async / await构造:

 async function func1() { for (var i = 0; i < 3; i++) { console.log(`func1 waiting for func2 #${i + 1}`); await func2(); // await in loop until func2() completed console.log(`Finished iteration ${i} for func1`); } } async function func2() { console.log('Started func2'); for (var i = 0; i < 10; i++) { console.log(`func2 waiting for func3 #${i + 1}`); await function3(); //wait untill function3 and then continue looping } } function function3() { return new Promise(resolve => setTimeout(resolve, 1000)); } func1().then(() => console.log('finished')); 

要获得更广泛的浏览器支持,可以使用Babel

我不知道这是最好的解决方案,但这是某种方式,我认为这很容易实现。

 function func1(i){ i++; return new Promise(function(ready){ setTimeout(function(){ func2(i); ready(i); }, 1000); }); } function func2(i = 0){ if(i < 10){ func1(i).then((test) => { console.log(test); }) } else { return false; } } func2(); 

您可以使用jQuery的.each() ,它是同步的,因此下一个循环要等到上一个结束才触发。 您也可以添加回调,但是这里并不需要它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM