JavaScript中不能混合同步和異步,如果阻止腳本,則阻止瀏覽器。
你需要完全按照事件驅(qū)動的方式來這里,幸運的是,我們可以把丑陋的東西藏起來。
編輯:更新了密碼。
function asyncLoop(iterations, func, callback) {
var index = 0;
var done = false;
var loop = {
next: function() {
if (done) {
return;
}
if (index < iterations) {
index++;
func(loop);
} else {
done = true;
callback();
}
},
iteration: function() {
return index - 1;
},
break: function() {
done = true;
callback();
}
};
loop.next();
return loop;}
這將為我們提供一個異步的loop
當然,您可以進一步修改它,例如,檢查循環(huán)條件等函數(shù)。
現(xiàn)在開始測試:
function someFunction(a, b, callback) {
console.log('Hey doing some stuff!');
callback();}asyncLoop(10, function(loop) {
someFunction(1, 2, function(result) {
// log the iteration
console.log(loop.iteration());
// Okay, for cycle could continue
loop.next();
})},
function(){console.log('cycle ended')});
以及產(chǎn)出:
Hey doing some stuff!
0
Hey doing some stuff!
1
Hey doing some stuff!
2
Hey doing some stuff!
3
Hey doing some stuff!
4
Hey doing some stuff!
5
Hey doing some stuff!
6
Hey doing some stuff!
7
Hey doing some stuff!
8
Hey doing some stuff!
9
cycle ended