这是我用来解决上述问题的一个小片段,纯粹使用回调(不告诉 JS 挂起)。它可能存在于其他地方,看起来很方便已经存在,但我还没有看到它。所以在这里希望它对你们中的一些人有所帮助。
如果您希望我改进我的语法或以某种方式优化它,请评论答案,我不是世界上最优雅的编码器。
function asyncloop(i,arr,each_cb,end_cb){
var cont,s;
//just do a quick check to ensure this is an array or not at end
if ($.isArray(arr)) {
s = arr[i];
if ((i+1) < arr.length) { cont = true; } else { cont = false; }
} else {
s= arr;
cont = false;
}
each_cb(s,function(){
if (cont == true) {
asyncloop((i+1),arr,each_cb,end_cb);
} else {
end_cb();
}
});
}
使用 -- 调用
asyncloop(0,my_data,function(o,callback){
//gets called with each element
some_asynch_function(o,function(r){
//blah blah blah
callback();
});
},function(){
//finish with this
alert('process is finished wowowow');
});
那就干杯!