我有一个初始化的服务变量:
service = new google.gdata.calendar.CalendarService('timeless');
这发生在回调函数中。我的问题是我有其他依赖服务变量的函数。如果我过早地调用它们,则变量未定义且脚本不执行任何操作。
主要问题是用户是否会尝试单击调用其中一个功能的按钮。如何让功能等待?如果我使用cutom spinlock,它会杀死浏览器。
我需要某种伪互斥或等待/休眠功能。我不认为setTimeout会有所帮助。
感谢。
答案 0 :(得分: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();
}
答案 1 :(得分:1)
引入一个间接级别:不是让onclick()代码直接调用这样的函数,而是让它将调用放在最初包含什么都不做的函数的变量上(或者可能显示错误消息,或以其他方式处理条件),然后初始化service
后,获得分配给它的实际函数:
.
.
var indirection = { func1: function(){}, func2: function(){} }
.
.
<element onClick = "indirection.func1()"></element>
.
.
service = new google.gdata.calendar.CalendarService('timeless');
indirection.func1 = functionThatUsesService
.
.