我的函数很少,应该在循环中逐个执行并有延迟。这是我的代码:
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);
});
}
但它不起作用。我应该改变什么?
答案 0 :(得分:4)
我认为您打算使用的是ES8&#39; s(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'));
&#13;
要获得更广泛的浏览器支持,您可以使用Babel
答案 1 :(得分:0)
我不知道它是最好的解决方案,但它是某种方式,我认为这很容易实现。
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();
&#13;
答案 2 :(得分:-1)
你可以使用jQuery&#39; .each()
,它是同步的,所以下一个循环不会一直触发,直到前一个结束。你也可以添加回调,但这里并不需要它们。