3

我有 3 个函数:func1func2func3

func1func2用于load()动态获取内容。

func3在func2加载的内容上运行并在其上显示动画。

我希望func1func2并行运行(以获得更好的性能),然后我希望func3在前两个完成后运行。

    var funcList = ['func1','func2'];
    $.each(funcList, function(i,v){
            window[v]();
    })
    func3();

我注意到func3()的动画没有运行可能是因为func2的内容还没有被获取。加载页面后,我从控制台运行func3()并且动画运行良好。为什么会这样?不是each()同步的吗?

4

1 回答 1

2

那是因为$.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) 
于 2013-03-05T09:37:48.193 回答