我有3个功能: func1 , func2 和 func3 。
func1 和 func2 使用load()
动态获取内容。
func3 在 func2 加载的内容上运行,并在其上显示动画。
我希望 func1 和 func2 并行运行(以获得更好的性能)然后我希望 func3 在前两个完成后运行
var funcList = ['func1','func2'];
$.each(funcList, function(i,v){
window[v]();
})
func3();
我注意到 func3()的动画可能无法运行,因为 func2 的内容尚未提取。一旦页面加载并且动画运行正常,我就从控制台运行 func3()。为什么会这样? Isnt each()
是否同步?
答案 0 :(得分:1)
这是因为$.ajax
是异步的......在调用func3
时,无法保证其他两个ajax调用已成功完成..您可以使用$.when检查返回的promise,一旦解析了两个函数,就运行第三个函数。
试试这个
$.when(funcList).then(func3)
例如
var func1=function(){
return $.get('url',function(data){....});
}
var func2=function(){
return $.get('url2',function(data){....});
}
function func3(){
// animation here
}
$.when(func1(),func2()).then(func3)