2016-01-11 3 views
1

Было бы здорово, если вы могли бы цепь process.on («выход») называет как иNode.js: Цепь process.exit() вызывает

process.on('exit', function firstHandler(err,code,cb){ //this signature is fictitious for this example only 
    if(condition){ 
     cb(null); // this would call the next process.on('exit') listener 
     } 
}); 

process.on('exit', function secondHandler(err,code,cb){ 
    //we really exit this time 
}); 

эта функциональность можно каким-то образом? Я знаю, что это противоречит тому, как работают излучатели/слушатели событий, но причина, по которой я задаю этот вопрос, заключается в том, что я хочу предотвратить выход, если есть определенное условие, а затем повторно вызывает process.exit() после выполнения условия.

ответ

2

Это уже работает именно так. По умолчанию EventEmitters добавляют прослушиватели событий при вызове метода on() (по умолчанию максимум 10 слушателей, хотя вы можете это изменить). Поскольку exit событие implemente как обычный EventEmitter, вы можете добавить более одного слушателя по телефону on() несколько раз:

process.on('exit',function(){console.log('will exit')}); 
process.on('exit',function(){console.log('really, I will quit')}); 
process.on('exit',function(){console.log('DEAD')}); 

Выход:

will exit 
really, I will quit 
DEAD 

Обратите внимание, что слушатели будут вызываться в последовательности они были добавлены. Дополнительную информацию см. В документации по событиям: https://nodejs.org/api/events.html

+0

Да, но это не дает функциональности, которую я ищу - я хочу предотвратить выход - думаю, мне просто нужно использовать промежуточный шаг перед вызовом process.exit() –

1

Вы не можете отменить выход. From the doc:

Испускается, когда процесс собирается выйти. Невозможно предотвратить выход из цикла событий в этот момент, и как только все «выходные» слушатели закончатся, процесс завершится.

+0

, однако вы можете отменить выход, если вы слушаете событие «beforeExit» - https://nodejs.org/api/process.html –

+1

@AlexMills Я ничего не вижу об отмене, он говорит только, что вы можете сделать еще одну работу до конца. Кроме того, 'beforeExit' не запускается, когда выход является явным (process.exit() или исключение), он срабатывает только тогда, когда программа завершается нормально (больше нечего делать). – Shanoor

0

После того как событие «exit» вышло, вы не можете остановить процесс node.js.

Однако, если вы прислушаетесь к этому событию «beforeExit», как показано здесь:

https://nodejs.org/api/process.html

Вы можете предотвратить цикл процесса/события из прекращали путем добавления вызовов.

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