[英]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.