什么时候事件监听器在Node.js中附加?

时间:2016-02-18 11:59:42

标签: javascript node.js node-redis

我使用node-redis模块连接到redis 因此,我附加了一个事件监听器来处理无法建立redis服务器连接的情况。

client = redis.createClient(6379, 'localhost')
client.on('error',(err)=>{
    console.log('redis connection refused')
})

这是没有侦听器时发生的错误。

events.js:141
  throw er; // Unhandled 'error' event
  ^
Error: Redis connection to localhost:6379 failed - connect ECONNREFUSED 127.0.0.1:6379
at Object.exports._errnoException (util.js:837:11)
at exports._exceptionWithHostPort (util.js:860:20)
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1060:14)

现在我的问题是,此事件监听器何时附加到'客户端'。是否可能在连接事件侦听器之前抛出连接拒绝错误?

1 个答案:

答案 0 :(得分:2)

这是可能的,但不是像你那样在彼此旁边运行命令时。此代码将提供您粘贴的相同错误:

client = redis.createClient(6379, 'localhost')
setTimeout(function() {
    client.on('error',(err)=>{
        console.log('redis connection refused')
    })
}, 3000);

在您的代码中不会发生这种情况的原因是节点线程在您的线程中运行时不会产生事件处理,因此事件处理将在您的错误处理程序附加后发生。

您可以全局侦听未捕获的错误事件,以捕获可以附加之前发生的错误。

process.on('uncaughtException', (err) => {
  console.log('whoops! there was an error');
});