Node.js, comme js, dispose également de minuteries, de minuteries d'expiration, de minuteries d'intervalle, de minuteries ponctuelles et de la fonction process.nextTick(callback) pour implémenter la planification d'événements. Aujourd'hui, apprenons à utiliser setTimeout et setInterval.
1. setTimeout timer (similaire à after dans GCD)
Dans node.js, vous pouvez utiliser la méthode setTimeout(callback, delayMillSeconds, [args]) intégrée à node.js. Lors de l'appel de setTime(), la fonction de rappel sera après delayMillSeconds
L'exécution de .setTime() renverra un ID d'objet timer, qui peut être annulé en transmettant l'ID à clearTimeout(timeoutId) avant l'expiration de delayMillSeconds.
function myfunc(){ console.log("myfunc"); }; var mytimeout=setTimeout(myfunc,1000); clearTimeout(mytimeout);
"C:\Program Files (x86)\JetBrains\WebStorm 11.0.3\bin\runnerw.exe" F:\nodejs\node.exe timer.js Process finished with exit code 0
Si vous commentez la ligne clearTimeout(mytimeout);, vous pouvez voir que myfunc() sera exécuté.
"C:\Program Files (x86)\JetBrains\WebStorm 11.0.3\bin\runnerw.exe" F:\nodejs\node.exe timer.js myfunc Process finished with exit code 0
2. setInterval timer (similaire à dispatch_source_t ou NSTimer dans GCD)
Le minuteur d'intervalle est utilisé pour effectuer un travail à intervalles réguliers. Semblable à setTimeout, node.js a setInterval(callback, delayMilliSecond, [args]) intégré pour créer et renvoyer l'ID de l'objet timer, et l'annuler via clearInterval( ) .
/** * Created by Administrator on 2016/3/11. */ function myfunc(Interval){ console.log("myfunc "+Interval); } var myInterval=setInterval(myfunc,1000,"Interval"); function stopInterval(){ clearTimeout(myInterval); //myInterval.unref(); } setTimeout(stopInterval,5000);
Le code ci-dessus sert à créer la fonction de rappel myfunc de setInterval. Le paramètre est Interval. setInterval est exécuté toutes les 1 s. setTimeout est exécuté après 5 secondes.
"C:\Program Files (x86)\JetBrains\WebStorm 11.0.3\bin\runnerw.exe" F:\nodejs\node.exe Interval.js myfunc Interval myfunc Interval myfunc Interval myfunc Interval Process finished with exit code 0
3. Annulez la référence du minuteur de la boucle d'événement
Lorsqu'il n'y a que des fonctions de rappel de minuterie dans la file d'attente des événements, si vous ne souhaitez plus les exécuter, vous pouvez utiliser la fonction unref() de l'objet renvoyé par setInterval et setTimeout pour notifier à la boucle d'événements de ne pas continuer.
Lorsque unref() est utilisé en combinaison avec setTimeout, un timer indépendant doit être utilisé pour réveiller la boucle d'événements. Une utilisation intensive aura également un impact sur les performances, alors utilisez-la le moins possible.
4. Le temps d'exécution de setTimeout et setInterval est inexact
Ils ajoutent des rappels à la file d'attente des événements à certains intervalles, et l'exécution n'est pas trop précise
function simpleTimeout(consoleTime) { console.timeEnd(consoleTime); } console.time("twoSecond"); setTimeout(simpleTimeout,2000,"twoSecond"); console.time("oneSecond"); setTimeout(simpleTimeout,1000,"oneSecond"); console.time("fiveSecond"); setTimeout(simpleTimeout,5000,"fiveSecond"); console.time("50MillSecond"); setTimeout(simpleTimeout,50,"50MillSecond");
Les résultats de l'exécution du code ci-dessus plusieurs fois seront différents.
"C:\Program Files (x86)\JetBrains\WebStorm 11.0.3\bin\runnerw.exe" F:\nodejs\node.exe timer.js 50MillSecond: 51ms oneSecond: 1000ms twoSecond: 2002ms fiveSecond: 5001ms Process finished with exit code 0
Ce qui précède représente l'intégralité du contenu de cet article. J'espère qu'il sera utile à tout le monde d'apprendre à utiliser setTimeout et setInterval dans Node.js.