Javascript在for循环结束时执行操作

Javascript在for循环结束时执行操作,javascript,for-loop,action,Javascript,For Loop,Action,我想在执行循环时显示正在加载的gif。当循环结束时,隐藏它。For循环持续几秒钟 $("#loading").removeClass('hidden'); for (var i = 0; i < 10; i++) { clearInfo(i); loadInfo(i, getInfo()); } $("#loading").addClass('hidden'); $(“#加载”).remove

我想在执行循环时显示正在加载的gif。当循环结束时,隐藏它。For循环持续几秒钟

$("#loading").removeClass('hidden');
        for (var i = 0; i < 10; i++)
        {
            clearInfo(i);
            loadInfo(i, getInfo());
        }
$("#loading").addClass('hidden');
$(“#加载”).removeClass('hidden');
对于(变量i=0;i<10;i++)
{
clearInfo(一);
loadInfo(i,getInfo());
}
$(“#加载”).addClass(“隐藏”);
这是行不通的。我假设最后一个addClass是在removeClass之后执行的,并且没有等待循环

一种方法应该是,在带有回调的函数中插入循环,但是没有更简单的方法吗


在这方面,

JavaScript在单个线程中运行。通过复杂的同步计算阻塞该线程不是一个好主意。结帐

如果
loadInfo
是异步操作,则可以使用如下承诺:

// show your loading indicator

var promises = [];
for (var i = 0; i < 10; i++) {
    clearInfo(i);

    // loadInfo returns promise
    promises.push(loadInfo(i, getInfo()));
}
Q.all(promises)
  .then(function () {
    // hide your loading indicator
  });
//显示您的加载指示器
var承诺=[];
对于(变量i=0;i<10;i++){
clearInfo(一);
//loadInfo返回承诺
promises.push(loadInfo(i,getInfo());
}
所有(承诺)
.然后(函数(){
//隐藏装载指示器
});

使用回调的解决方案将是一个混乱和肮脏的解决方案(根据我个人的意见)。

我可能会按照以下思路做一些事情:

$("#loading").removeClass('hidden');
for (var i = 0; i < 10; i++) {
    clearInfo(i);
    loadInfo(i, getInfo());
    if ( i == 9 ) {
        // this is the final pass through the loop
        $("#loading").addClass('hidden');
    }
}
$(“#加载”).removeClass('hidden');
对于(变量i=0;i<10;i++){
clearInfo(一);
loadInfo(i,getInfo());
如果(i==9){
//这是循环的最后一次
$(“#加载”).addClass(“隐藏”);
}
}

如果您使用的是JQuery,则可以使用类似于
.hide()
.show()
的方法。出于同样的原因,
.toggle()
会同时执行这两项操作,但会前后翻转。