Поймать исключение в node.js - PullRequest
3 голосов
/ 10 ноября 2011

У меня есть простая программа, которая должна убедиться, что я могу подключиться к серверу Redis.Я использую node-redis для подключения и мне нужно дождаться, пока Redis запустится.Я использую этот фрагмент кода:

function initializeRedis(callback) {
    (function createClient(){
        var runner;
        try {
            client = redis.createClient();
        } catch (e) {
            setTimeout(createClient, 1000);
        }
        callback();
    })();
};

initializeRedis(function() {
// Work here
});

Это потому, что без try / catch я получил исключение из node.js:

 node.js:134
         throw e; // process.nextTick error, or 'error' event on first tick
         ^ Error: Redis connection to 127.0.0.1:6379 failed - ECONNREFUSED, Connection refused
     at Socket.<anonymous> (/var/www/php-jobs/node_modules/redis/index.js:88:28)
     at Socket.emit (events.js:64:17)
     at Array.<anonymous> (net.js:830:27)
     at EventEmitter._tickCallback (node.js:126:26)

Когда я запускаю redis-сервер (Машина Ubuntu) и запускаю этот скрипт, все отлично работает.Если я останавливаю redis-сервер и запускаю скрипт, он не перехватывает исключение и все равно выдает это же исключение.Как это возможно?У меня есть заявление о попытке поймать!

1 Ответ

9 голосов
/ 10 ноября 2011

После client = redis.createClient(); установите обработчик для события error:

client.on('error', function(err) {
  // handle async errors here
});

Посмотрите на трассировку стека - ваш код отсутствует, поэтому нет места, где try / catch мог бы перехватить ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...