Javascript等待变量

时间:2011-01-06 15:02:04

标签: javascript google-calendar-api

我有一个初始化的服务变量:

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

这发生在回调函数中。我的问题是我有其他依赖服务变量的函数。如果我过早地调用它们,则变量未定义且脚本不执行任何操作。

主要问题是用户是否会尝试单击调用其中一个功能的按钮。如何让功能等待?如果我使用cutom spinlock,它会杀死浏览器。

我需要某种伪互斥或等待/休眠功能。我不认为setTimeout会有所帮助。

感谢。

2 个答案:

答案 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
.
.