2011-01-06 34 views
0

我有一個初始化的服務變量:的Javascript等待可變

service = new google.gdata.calendar.CalendarService('timeless'); 

這發生在一個回調函數。我的問題是我有其他依賴於服務變量的函數。如果我打電話給他們太早,變量是未定義的,腳本什麼也不做。

主要問題是如果用戶嘗試點擊一個按鈕來調用其中一個函數。我如何使該功能等待?如果我使用自旋鎖,它會殺死瀏覽器。

我需要某種僞互斥或等待/睡眠功能。我不認爲setTimeout會有幫助。

謝謝。

+1

你爲什麼不禁用按鈕,直到數據可用? – 2011-01-06 15:06:36

回答

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(); 
    }