2010-07-11 8 views
5

Ho fatto una funzione in JavaScript per controllare ogni 100 ms se viene caricata una variabile globale. Quando la variabile sarà caricata, la funzione restituirà il valore della variabile come mostrato di seguito. Nel mio codice utilizzo un server HTTP in JavaScript, e la variabile verrà caricata quando una specifica richiesta HTTP con specifiche intestazioni arriva al mio server.come aspettare con setTimeout fino a quando una variabile viene caricata e, allo stesso tempo, riceve richieste HTTP!

function checkVariable() 
{ 
    if (myvar != null) 
    { 
      return myVar; 
    } 
    else 
    { 
      window.setTimeout("checkVariable();",100); 
    } 
} 

utilizzo questa funzione in un pezzo di codice come questo:

// arithmetis operations... [1] 

myVar = checkVariable(); 

// arithmetic operations that use myVar [2] 

myVar viene avviata con null. Il problema è che le operazioni aritmetiche in [2] vengono eseguite prima che myVar ottenga il suo valore. Invece, voglio che il mio codice attenda fino a che myVar non abbia il suo valore e poi continui con le operazioni.

Prima di provare la funzione setTimeout, ho provato a rendere il codice in attesa utilizzando un ciclo while, ma il problema era che il server HTTP non poteva ricevere alcuna richiesta HTTP a causa dell'esecuzione continua del ciclo while!

Qualcuno potrebbe aiutarmi a risolvere questo problema?

Grazie in anticipo!

risposta

11

Probabilmente farei delle restanti operazioni aritmetiche un callback. Qualcosa di simile:

function checkVariable() 
{ 
    if (myvar != null) 
    { 
      computeVariable(myVar); 
    } 
    else 
    { 
      window.setTimeout("checkVariable();",100); 
    } 
} 

Poi:

// arithmetis operations... [1] 

myVar = checkVariable(); 

function computeVariable(myVar) { 
    // arithmetic operations that use myVar [2] 
} 
+0

Grazie jpoz! È una buona idea! Lo proverò! Anche se preferirei una soluzione che non utilizza callback, perché dopo i calcoli vorrei ripetere l'intero processo per più volte. Ovvero, per rendere nuovamente myVar null e per controllare il meteo, viene caricato un altro valore, in modo da eseguire altre operazioni. –

+0

Inoltre, è meglio evitare l'uso di una stringa per il nome del metodo, poiché questo finisce per fare qualche brutta valutazione () codice. – Yoda

Problemi correlati