30
2009
Bypassare il problema dell’asincronia di javascript
Questo articolo è stato pubblicato 2 anni 3 mesi 13 giorni giorni fa quindi alcuni contenuti o informazioni presenti in esso potrebbero non essere più validi. Questo sito non è responsabile per eventuali errori causati da questo problema.Vi sarà sicuramente capitato, programmando in javascript, di affrontare l’annoso problema delle chiamate asincrone tipiche di questo linguaggio. Ad esempio io e il mio amichetto mentre giocavamo con le funzioni jquery, in particolare quelle relative al dialog (vedi esempi), ci siamo trovati difronte a questo problema:
Codice Javascript
$(‘button’).bind(‘click’,FUNZIONCINA);
function FUNZIONCINA(){
$(‘dialog’).dialog();
}
Questo codice non funziona.
Il problema è dovuto al fatto che al momento del click su “button” viene lanciata FUNZIONCINA e viene subito conclusa, senza attendere un eventuale click sul dialog. Ovviamente in questo modo si perde l’utilità dei dialog perché non si può catturare la scelta dell’utente.
Qualcuno in giro per il web propone di utilizzare estensioni di javascript (tipo narrativejs) che aggiungono proprietà bloccanti al linguaggio.
Un modo più immediato di risolvere il problema è utilizzare la funzione setTimeout sulla chiamata alla funzione che nel normale flusso viene terminata con la conclusione della funzione madre. Per intenderci il nostro codice che prima non funzionava diventa:
Codice Javascript
$(‘button’).bind(‘click’,FUNZIONCINA);
function FUNZIONCINA(){
setTimeout(function(){$(‘dialog’).dialog();}, 0};
}

An article by






Bravissimi, questa cosa è importante perchè pochi giorni fa anche io smanettavo con quel cavolo di dialog e ho avuto non pochi problemi.
Bravi davvero.