2014-11-21 5 views
1

Я ищу, чтобы отключить функцию, но только при двух или нескольких событиях. Есть ли встроенный способ сделать это?Как проверить два события в node.js

Вот с одним событием:

setup.on('api routes ready', function() { 
    console.log('Yay!'); 
}); 

Как я могу это сделать:

setup.on('api routes ready', 'website routes ready', function() { 
    console.log('Yay!'); 
}); 

Любые идеи будут зажигает!

+1

Возможно, вам понадобится создать флаг, который будет показан при первом запуске события, поэтому, когда произойдет второе событие, вы это узнаете. – Sirko

+0

Бу, хорошо, ха-ха. – Costa

ответ

2

Лучшее сделано с библиотекой, такой как async, которая имеет соответствующие функции.

С помощью этого вы можете выбрать, выполнять ли ваши функции параллельно или последовательно, а если параллельно, то вы можете определить обратный вызов, который будет запускаться только после завершения всех функций.

В то время как код @ HeadCode будет работать, он не масштабируется хорошо и легко ошибиться.

+0

Вопрос, являются ли типы вещей в async, которые впитываются в класс eventEmitter узла? – Costa

+0

Хороший вопрос. Но я так не думаю, они, похоже, хотят, чтобы сам узел был довольно легким. Я предполагаю, что это действительно другой вариант использования. Асинхронные и подобные библиотеки просто удобны для добавления к асинхронному характеру Node. Они значительно упрощают ваш собственный код. Возможно, вы могли бы сделать это с событиями, но я думаю, что это было бы более сложным. –

+0

Я пытаюсь сделать это сам, это интересно, заставляет вас использовать JavaScript по-настоящему странным и интересным образом. Закрытие, && и т. Д. – Costa

1

Это (непроверенный) старт.

var waitForIt = (function(){ 
    var api_ready = false; 
    var web_ready = false; 
    return function(event){ 
     if (event === 'api routes ready'){ 
      api_ready = true; 
     } 
     if(event === 'web routes ready'){ 
      web_ready = true; 
     } 

     if(api_ready && web_ready){ 
      console.log('Yay!'); 
     } 
    } 
})(); 

setup.on('api routes ready', function() { 
    waitForIt('api routes ready'); 
}); 

setup.on('web routes ready', function() { 
    waitForIt('web routes ready'); 
}); 
Смежные вопросы