[Php-it] [JS] simulare lo sleep.

Cristiano Verondini cverondini at deis.unibo.it
Thu Dec 28 13:09:43 CET 2006


>>>    while (miaglobal == true) tmp = '';
>>
>>    Questo è un loop attivo. *non* si fa, *MAI*.
>
> Lo so anche io che non si fa mai, se utilizzassi una varibile locale,
> ma miaglobal è una variabile global quindi nel mentre del while() il
> suo stato potrebbe anche cambiare (la funzione richiamata da setTimeout
> dovrebbe avere questo scopo). Ripeto che setTimeout esegue la funzione
> che passi come primo parametro solo dopo il numero di millesecondi che
> passi come secondo parametro non è che si ferma ad aspettare il
> timeout, quindi l'unico modo per far attendere i l browser è quello
> di fare una azione ripetitiva subito dopo setTimeout fino a quando
> una qualche cosa non blocca questa azione; ecco il perche' dell'uso di una 
> variabile
> globale.

    Ho compreso la logica, ma che succede se per qualche motivo, qualsiasi 
motivo, quella variabile non cambia stato?

> Potrà anche essere quello corretto, ma la prima istruzione dopo
> setTimeout deve essere quella che simula il tempo che passa senza fare
> nulla.

    No, continui a pensare in modo procedurale, non in modo asincrono.

> Qui non si tratta di ajax. si tratta di far passare del tempo tra due
> azioni.

    Due funzioni. La prima chiama settimeout() con l'intervallo e il nome 
della seconda, la seconda viene chiamata allo scadere del tempo. Non c'è 
altro modo.

> E' porprio perche' non è multithread che dovrebbe funzionare. Il ciclo
> while su una variabile globale dovrebbe servire proprio allo scopo di
> continuare a fare una o piu' azioni fino a quando la variabile globale
> non cambia stato (rispetto a quello che fa restare nel ciclo).

    Ma al giorno d'oggi c'è ancora qualcuno che usa cicli di polling attivo? 
Ripeto, non è questo il modo.

> Allora vuole dire che qualche cosa nel JS non funziona come dovrebbe.
> e che ancora peggio Safari è fatto male, perche' uno script di due righe
> di JS ti uccide tutta l'interfaccia utente.

    Questo è un problema del team di sviluppo di safari, ma la cosa 
importante è capire come risolvere il problema nel modo corretto.

> Non è un while(true) ma un while(varibiale_globale = true) quindi se
> cambio valore alla variabile globale lui deve uscire dal while. Visto
> che non lo fa, mi sorge il dubbio che il valore della
> variabile_globale sia salvato da qualche parte all'interno del while e che 
> quindi non
> venga piu' confrontanto con quello attuale (che nel fratttempo
> potrebbe essere cambiato).

    Improbabile, a meno che tu non usi delle closure. Più probabile, il 
valore non viene per niente cambiato a causa di un qualche errore di logica, 
di recupero di dati o altro. Userei un debugger JS per capirlo.

>>    Insomma, ripensa un pochino a cosa vuoi fare! :)
>
> So' benissimo cosa voglio fare. E' JS che non me lo fa fare :)

    Allora io penserei ad un modo *diverso* per farlo! :)

        Cris

-- 
Cristiano Verondini
http://www.verondini.it  ---   [ICQ: 114 190] 



More information about the Php-it mailing list