2017-07-24 3 views
1

Envisagez la configuration de cluster node.js suivante. Comment peut-on activer le rappel off pour empêcher les rappels de messages? Il ne se trouve pas de méthode off. Je dois mettre à jour le rappel avec un nouveau rappel et il semble que tous les anciens rappels soient également déclenchés.Node.js Travailleur de cluster: désactivez l'événement

 cluster.on('fork', worker => { 
     worker.on('message', msg => {// Do something...}) 
     }) 

Répondre

2

Le contraire de .on() est .removeListener() parce .on() est tout simplement un alias pour .addListener(). Pourquoi ils ont ajouté .on() comme un alias, mais n'a pas ajouté .off() comme un alias aussi, je ne sais pas vraiment (semble logique pour moi). Mais, pour pouvoir supprimer un seul écouteur avec removeListener(), vous avez besoin d'une référence de fonction pour la fonction que vous avez jointe à l'origine. Donc, vous devez enregistrer que:

cluster.on('fork', worker => { 
    function msgHandler(msg) { 
     // process message 
    } 

    // add event handler 
    worker.on('message', msgHandler); 

    // then, sometime later, to remove the event handler 
    worker.removeListener('message', msgHandler); 
}); 

Si vous voulez juste pour supprimer tous les écouteurs d'événements pour un événement donné, vous ne devez pas enregistrer l'ancienne référence de fonction:

cluster.on('fork', worker => { 
    worker.on('message', msg => {// Do something...}) 

    // some time later, remove all listeners for a particular message 
    worker.removeAllListeners('message'); 
}); 

réponse connexes : What is the difference between addListener(event, listener) and on(event, listener) method in node.js?

+0

@anshulkoka - Est-ce que je peux répondre à cette question? Si oui, vous pouvez l'indiquer à la communauté en cliquant sur la coche verte à gauche de la réponse et cela vous rapportera également des points de réputation. – jfriend00