2011-01-06 3 views
0

を待ちます。私の問題は、私はサービス変数に依存する他の関数があることです。変数をあまりにも早く呼び出すと、変数は定義されず、スクリプトは何もしません。Javascriptが私が初期化されたサービス変数を持つ変数

主な問題は、ユーザーがこれらの機能のいずれかを呼び出すボタンをクリックしようとする場合です。どのように機能を待たせることができますか?カットソムスピンロックを使用すると、ブラウザが強制終了します。

私はある種の擬似ミューテックスまたは待機/スリープ機能が必要です。私はsetTimeoutが助けになるとは思わない。

ありがとうございました。

+1

は、なぜあなたはボタンを無効にしないのですか? –

+0

可能な重複:http://stackoverflow.com/questions/1759987/detect-variable-change-in-javascript – Incognito

答えて

1

間接のレベルを導入:むしろ直接のonclick()コード呼び出しこのような機能を有するよりも、それが最初に何もしない関数を含む(あるいは、エラーメッセージを表示する変数に電話をかける有し、 serviceが初期化されると、あるいは条件を扱う)、それに割り当てられた実際の関数ます:データが利用可能になるまで

. 
. 
var indirection = { func1: function(){}, func2: function(){} } 
. 
. 
<element onClick = "indirection.func1()"></element> 
. 
. 
service = new google.gdata.calendar.CalendarService('timeless'); 
indirection.func1 = functionThatUsesService 
. 
. 
1

このようなことはどうですか?

$(initservice); 

function initOtherSTuff(){ 
//init other stuff 
} 

function initService(initCalled){ 
    if(!initCalled){ 
     service = new google.gdata.calendar.CalendarService('timeless'); 
    } 
    else if(!service){ 
     window.setTimeout(function(){initService(true);},500); 
    } 
    else{ 
     initOtherStuff(); 
    } 
関連する問題