2012-09-09 2 views
1

Nodejs a une méthode process.nextTick(fn) qui retarde l'exécution d'une fonction jusqu'à la prochaine coche. Selon this article cela peut être utilisé pour émettre des événements dans le constructeur d'un objet comme celui-ci (copié à partir du Artice):Nodejs: Quand une coche est-elle exécutée

function StreamLibrary(resourceName) {  
    var self = this; 

    process.nextTick(function() { 
     self.emit('start'); 
    }); 

} 

var stream = new StreamLibrary('fooResource'); 

stream.on('start', function() { 
    console.log('Reading has started'); 
}); 

Sans process.nextTick cela n'aurait pas fonctionné parce que l'événement aurait été émis avant eu la chance d'écouter des événements. Cependant, comment pouvez-vous être certain que l'événement ne sera pas émis avant d'avoir ajouté un écouteur d'événement? Si elle est entièrement asynchrone, il y a une chance que la prochaine coche soit exécutée avant la fin du constructeur, ignorant ainsi l'écouteur d'événement. Alors, quelles sont les règles derrière ce processus? Quand le noeud exécute-t-il un nextTick?

Répondre

3

La coche suivante est exécutée le ... suivant. Je pense que la confusion ici est ce que vous voulez dire par "entièrement asynchrone". Avec Node.js, tout votre code s'exécute sur un seul thread avec Node.js. Aucun code programmé pour la prochaine coche ne sera exécuté tant que la coche actuelle n'est pas terminée. Par conséquent, lorsque vous émettez des événements à partir de la prochaine coche dans le constructeur, le code qui peut attacher les gestionnaires sera terminé avant la prochaine coche.

La partie asynchrone et multithread du nœud concerne les opérations de traitement telles que le réseau et les E/S. Ces appels de fonction s'exécutent pendant l'exécution de votre code JavaScript, mais lorsque les données sont renvoyées à votre code, elles ne s'exécutent pas avant la prochaine coche.

Questions connexes