当前位置:  开发笔记 > 编程语言 > 正文

在node.js中捕获异常

如何解决《在node.js中捕获异常》经验,为你挑选了1个好方法。

我有一个简单的程序,需要确保我可以连接到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. (/var/www/php-jobs/node_modules/redis/index.js:88:28)
     at Socket.emit (events.js:64:17)
     at Array. (net.js:830:27)
     at EventEmitter._tickCallback (node.js:126:26)

当我启动redis-server(Ubuntu机器)并启动此脚本时,一切正常.如果我停止redis-server并启动脚本,它不会捕获异常并仍然抛出同样的异常.怎么可能?我有一个try/catch语句!



1> thejh..:

之后client = redis.createClient();,为error事件设置处理程序:

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

看看堆栈跟踪 - 你的代码不在其中,所以没有try/catch可以捕获错误的地方.

推荐阅读
手机用户2402851335
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有