2016-03-14 2 views
2

Есть ли способ «съесть» других слушателей мероприятия?Есть ли способ «съесть» события в Node.js?

x.on("test", function(x){ 
    if(x==4) { 
     console.log("Event1"); 
    } 
}); 
x.on("test", function(x){ 
    if(x==5) { 
     console.log("Event2"); 
    } 
}); 
x.on("test", function(x){ 
    console.log("Event3"); 
}); 
x.emit("test", 4); 
x.emit("test", 5); 
x.emit("test", -1); 

Есть ли способ, чтобы сделать событие 1 «съесть» (не позволяют этому случиться) другие события, если х 4?

Без добавления if (x! = 4 & & x! = 5) к событию 3 (если есть много слушателей, это может раздражать быстро).

Бонус: Могу ли я иметь «аварийное» событие, чтобы поймать события, у которых нет слушателя.

+1

для решения, почему бы не добавить флаг как 'eventTest.eaten = истина;' и проверить его :); Я не уверен, что кто-нибудь гарантирует, что события будут запущены в той же очереди, в которой они были установлены. –

+1

вы также можете использовать объект как данные о событиях, такие как «{значение: 111, eaten: false}» и установить, что он был использован в качестве события пожара. –

ответ

1

Встраиваемый в узел EventEmitter не поддерживает «поедание» других обработчиков событий или имеет обработчик событий «весь-весь». Если вам нужна такая функциональность, вам придется использовать одну из других реализаций EventEmitter на npm.

+0

Я нашел eventif полезным для слушателей условностей. Тем не менее, я не нахожу модуль для всех. – iovoid

0

вы можете просто попробовать это

x.on("test", function(x){ 

     switch(x){ 
      case 4:   
       console.log("Event1"); 
       break; 
      case 5: 
       console.log("Event2"); 
       break; 
      default: 
       console.log("Event3"); 

     } 

    }); 
    x.emit("test", 4); 
    x.emit("test", 5); 
    x.emit("test", -1); 
+0

Моя идея - не делать этого. И «уловка» - для ВСЕХ СОБЫТИЙ, а не просто «тест». – iovoid

Смежные вопросы