2011-01-06 59 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(); 
    }