Maison  >  Article  >  interface Web  >  Maîtrisez rapidement l'utilisation de setTimeout et setInterval dans Node.js_node.js

Maîtrisez rapidement l'utilisation de setTimeout et setInterval dans Node.js_node.js

WBOY
WBOYoriginal
2016-05-16 15:09:561486parcourir

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.

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn