Si può evitare che una chiamata a funzione javascript ritorni undefined bloccando
l'esecuzione degli script successivi e provocando uno stop indesiderato del processo
di visualizzazione di una pagina web?
Questa eventualità può facilmente accedere se ancora la funzione chiamata non è definita nello spazio di memoria della pagina attuale, questo ad esempio può avvenire se ancora tutti i file javascript referenziati non sono completamente caricati e la chiamata a funzione avviene troppo presto.
Come è noto javascript è un linguaggio basato sul paradigma del funzionamento asincrono,
cioè il carimento dei file .js in una pagina web avviene progressivamente in maniera parallela ed asincrona, ed anche l'esecuzione delle funzioni chiamate dalla pagina in corso di renderizzazione avviene in maniera asincrona rispetto al flusso lineare di programma.
Vediamo come è possibile procedere, prendiamo una definizione qualsiasi funzione come ad esempio la seguente initLingua :
function initLingua(lingua) {
.....
}
Invece che chiamarla per eseguire i compiti a questa demandati nel seguente modo classico :
initLingua(lingua);
Possiamo procedere definendo la seguente funzione CallWithWait, facendo in modo che questa venga caricata nei primi file .js referenziati o direttamente in alto nella pagina :
function CallWithWait(initLingua, lingua)
{
(function wait() {
if (typeof functionname === "function") {
functionname(initLingua, lingua);//facciamo la chiamata
} else {
setTimeout(wait, 200);
}
})();
}
Successivamente possiamo chiamare la nostra funzione con la seguente:
CallWithWait(initLingua, lingua);
Così facendo la la chiamata a initLingua viene ripetuta ogni 200 millisecondi, senza generare eccezioni, fino al momento in cui la funzione risulta definita nello spazio di memoria della pagina, dopodichè la chiamata viene fatta una sola volta.
Happy coding!