Node JS преждевременное завершение программы - PullRequest
0 голосов
/ 09 февраля 2012

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

lock ++
блокировка -

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

Как я могу это исправить?(В настоящее время я немного затрудняюсь с тем, как точно объяснить мою проблему, пожалуйста, спросите меня все, что вам нужно, чтобы я мог прояснить вопрос)

----- РЕДАКТИРОВАТЬ

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

var events  = require('events');
var eventEmitter = new events.EventEmitter();

eventEmitter.on('spo',function(){
console.log('spo');
});

Ответы [ 2 ]

0 голосов
/ 13 февраля 2012

ВЫХОД ИЗ потока Git Hub.

То, что поддерживает цикл событий, - это дескрипторы (сокеты, таймеры и т. Д.), Которых в вашем сценарии нет.

Экземпляры EventEmitter являются синхронными - то есть они запускаются немедленно - поэтому в вашем примере, как только событие сработало, сценарий завершен.

Думайте об этом так: сам по себе EventEmitter не является 'Это полезно, оно становится полезным только тогда, когда оно связано с чем-то, что испускает интересные события (данные из сети или файловой системы, таймер, который истекает и т. д.).

Я думаю, что ониговорят, что это дескриптор вне Node в землю C, который держит скрипт открытым.

0 голосов
/ 10 февраля 2012

Проблема в том, что вы настраиваете источник событий и присоединяете обработчик к событию «spo», а затем больше ничего не делаете.Таким образом, среда выполнения узла видит, что больше ничего не остается, и завершает работу.Попробуйте это:

eventEmitter.on('spo', function() {
  console.log('OK: got event "spo"');
});
eventEmitter.emit('spo');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...