2011-07-28 10 views
3

呼び出す前にクラスを非同期にロードするのを待つ適切な方法は何ですか?非同期ロードされたクラスが終了するのを待つ(コールバックなし)

注:私は非同期ロードコールバックを使用できない複雑な状況に陥っています。

これを行う最も良い方法ですか?もしあれば

callClassFunction : function() { 
    try { 
    waitingOnThisClass.someFunction(); 
    } catch (e) { 
    setTimeout("superClass.callClassFunction()",250); 
    } 
} 

* jQueryの方法は...

+1

は '非同期classes'何ですか? – davin

+0

@ダビン、固定質問 – Kyle

答えて

4

まあ言及する価値があります。 jQueryが許可されている場合 - jQuery promiseインターフェイスとjQuery.Deferredは単なるものです:

// Create a Deferred and return its Promise 
function asyncEvent(){ 
    var dfd = new jQuery.Deferred(); 
    setTimeout(function(){ 
     dfd.resolve("hurray"); 
    }, Math.floor(Math.random()*1500)); 
    setTimeout(function(){ 
     dfd.reject("sorry"); 
    }, Math.floor(Math.random()*1500)); 
    return dfd.promise(); 
} 

// Attach a done and fail handler for the asyncEvent 
$.when(asyncEvent()).then(
    function(status){ 
     alert(status+', things are going well'); 
    }, 
    function(status){ 
      alert(status+', you fail this time'); 
    } 
); 

もう1つの例、私はなるだろう

function doAjax(){ 
    return $.get('foo.htm'); 
} 

function doMoreAjax(){ 
    return $.get('bar.htm'); 
} 

$.when(doAjax(), doMoreAjax()) 
    .then(function(){ 
     console.log('I fire once BOTH ajax requests have completed!'); 
    }) 
    .fail(function(){ 
     console.log('I fire if one or more requests failed.'); 
    }); 
+0

情報ありがとう!私は週末後にこのjQueryソリューションを調べる必要があります! – Kyle

+0

恐ろしく!何とかjquery 1.5が私のプラットフォームを壊しますが、これは間違いなく将来的に便利になるでしょう! – Kyle

+0

私はそれを助けてくれてうれしいです:)私は多くのプロジェクトで遅延を使用しています - 複数の非同期呼び出しを処理する必要がある場合、間違いなく非常に便利です。 – ThatGuy

2

1つの変更はのtry/catchを取り除き、代わりに機能が(まだ)が存在するかどうかをテスト得ることです:あなたが明示的に

を言う必要はありません

callClassFunction : function() { 
    if (waitingOnThisClass && waitingOnThisClass.someFunction) 
    waitingOnThisClass.someFunction(); 
    else 
    setTimeout(superClass.callClassFunction,250); 
} 

注意

if (waitingOnThisClass != undefined 
    && typeof waitingOnThisClass.someFunction === "function") 

オブジェクト/関数として存在する場合、それらは「真実」と評価されるためです。

(あなたはのtry/catchを使用して行うと、機能がロードされますが、それにはいくつかの誤りがありました場合はキャッチをトリガーとだけ繰り返し、再び機能を再実行しないであろうこと?)

+0

それは本当ですか?私はFacebookのJavascript API 'if(FB)'を試して、IEがFBが定義されていないと言ってしまった。条件付きで壊れたように...そこに関数を追加してみる。ありがとう!月曜日のこのフォーラムに戻ってきます – Kyle

+0

+1 try/catchの問題を指摘してくれてありがとう – Kyle

関連する問題