3

func1func2func3の3 つの関数があります。

func1func2load()は、コンテンツを動的に取得するために使用します。

func3はfunc2によって読み込まれたコンテンツで実行され、アニメーションが表示されます。

func1とfunc2を並行して実行し (パフォーマンスを向上させるため) 、前の 2 つが完了したら func3実行します。

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

おそらくfunc2のコンテンツがまだフェッチされていないため、 func3()のアニメーションが実行されないことに気付きました。ページが読み込まれ、アニメーションが正常に実行されたら、コンソールからfunc3()を実行しました。なぜこうなった?同期ではありませんか?each()

4

1 に答える 1

2

それは$.ajaxが非同期であるためです..func3が呼び出されるまでに、他の 2 つの ajax 呼び出しが正常に完了したという保証はありません.. $.whenを使用して、返されたプロミスを確認し、2 つの関数が解決されたら、3 番目の関数を実行できます関数。

これを試して

$.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 に答える