2011-01-06 23 views
0

Ich habe ein Service-Variable, die initialisiert wird:Javascript Wartezeit für variable

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

Dies geschieht in einer Callback-Funktion. Mein Problem ist, dass ich andere Funktionen habe, die auf der Service-Variable beruhen. Wenn ich sie zu früh anrufe, ist die Variable nicht definiert und das Skript tut nichts.

Das Hauptproblem wäre, wenn der Benutzer versuchen würde, auf eine Schaltfläche zu klicken, die eine dieser Funktionen aufruft. Wie kann ich die Funktion warten lassen? Wenn ich einen Cut-Spinlock benutze, würde es den Browser töten.

Ich brauche eine Art Pseudo-Mutex oder Warte/Schlaf-Funktion. Ich denke nicht, dass setTimeout helfen würde.

Danke.

+1

Warum nicht deaktivieren Sie die Tasten gedrückt, bis die Daten verfügbar sind? –

+0

Mögliches Duplikat: http://stackoverflow.com/questions/1759987/detect-variable-change-in-javascript – Incognito

Antwort

1

eine Dereferenzierungsebene einführen: anstatt die Onclick mit() Coderuf solche Funktionen direkt, haben sie den Ruf auf eine Variable setzen, die zunächst eine Funktion, die nichts tut, enthält (oder vielleicht eine Fehlermeldung anzeigt, oder auf andere Weise behandelt den Zustand), dann einmal service wird wird initialisiert die reale Funktion zugewiesen:

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

Wie wäre es mit so etwas?

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