2009-09-17 5 views
1

Je comprends que la fonction setTimeout engendre un thread séparé qui attend x millisecondes avant d'exécuter la fonction JSsetTimeout en javascript question

setTimeout(functionName, timeInms); 

Ma question est de savoir s'il y a un moyen de le dire à exécuter après la JS sur la page a terminé l'exécution? Comme cela dépend de la quantité de JS sur la page, cela ne peut pas être un nombre absolu.

Ceci est une partie d'un plus grand problème que j'ai que je l'avais posté ici:

link text

L'essentiel est que ScriptManager ne garantit pas l'ordre d'exécution et je dois exécuter la fonction EndScript à la toute fin. Cela fonctionne un peu avec le setTimeOut bien que ce ne soit pas très précis (puisque le JS sur les pages diffèrent)

+1

Vous devez définir un nom dans votre profil. – SLaks

+0

C'est setTimeout, pas setTimeOut. –

Répondre

7

Javascript est monothread.

Si vous définissez un temporisateur qui expire alors que le code Javascript est encore en cours d'exécution, il attendra la fin du code avant d'exécuter la fonction de temporisateur. Pour clarifier, il attendra que la minuterie «sonne», puis exécute la fonction dès que le thread JS est libre, ce qui signifie que tout code Javascript est terminé.

Notez qu'il attendra tous les du code pour terminer l'exécution, pas seulement votre fichier particulier.

+0

"Si vous définissez un temporisateur qui expire alors que le code Javascript est encore en cours d'exécution, il attendra que le code se termine avant d'exécuter la fonction de temporisateur." Pouvez-vous expliquer cela plus en détail? Si j'ai setTimeOut ("EndScript()", 50); vérifie-t-il après les 50 premiers si un autre JS est en cours d'exécution, si c'est le cas, il attend qu'il se termine et après 50 ms, il exécute l'EndScript? – Nick

+3

Non, la fonction de minuterie bloquera le thread JS pour terminer l'exécution. Peu importe combien votre retard est court. Par exemple, avec "setTimeout (myFn, 1); doSomething();", myFn s'exécutera après 60ms si doSomething() prend 60ms. –

+0

@Ates Goral: Exactement. – SLaks