Javascript在for循环结束时执行操作
我想在执行循环时显示正在加载的gif。当循环结束时,隐藏它。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
$("#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()
会同时执行这两项操作,但会前后翻转。