及昨天的工作,正在写一个redis的业务操作模块。RedisManager。过程是 先从一个Set里查出所有 openId 然后循环查出 openId对应的User对象。
代码如下:
var EventProxy = require('eventproxy'); var client = require('./RDB'); function RedisManager(){} module.exports = RedisManager; /** * 根据openid获得用户Hash * @param openid * @param callback */ RedisManager.getUserByOpenId = function getUserByOpenId(openId, callback){ client.auth('aFu1hvCV5ks1G9jjx5J8'); console.log('OpenId--'+openId); var key = 'user:'+openId+':id'; client.get(key, function (err, obj) { if(err) throw err; var userId = obj; console.log('UserId--'+userId); RedisManager.getUserByid(userId, callback); }); } /** * 根据userid获取用户Hash * @param id * @param callback */ RedisManager.getUserByid = function getUserByid(id, callback){ getUserByid(id, callback); } /** * getUserByid * @param id * @param callback */ function getUserByid(id, callback){ var key = 'user:'+id; console.log('User by Id--'+key); client.hgetall(key, function (err, obj) { if(err) console.log(err); console.log('get User by Id--'+obj); callback(err, obj); }); }
杯具来了。。。字面翻译:rangeerror:最大调用堆栈大小超过
RangeError: Maximum call stack size exceeded
不会吧。。。我没做什么递归操作啊,最多就是回调多了几层,不过在node里很常见啊。于是百度之。发现了如下一片文章
http://blog.csdn.net/vean_system/article/details/7799232
没怎么看懂的说....不过初步认定好像是 方法调用有问题。这时突然发现,这个方法是调用了一个同名本地方法getUserByid,难道是这个问题引起的?
RedisManager.getUserByid = function getUserByid(id, callback){ getUserByid(id, callback); }
尝试把getUserByid方法直接写在 类的导出方法中,居然运行通过了~看来果然是这样,不过javascript功底有限,还不清楚到底为什么会出现这种情况。
RedisManager.getUserByid = function getUserByid(id, callback){ var key = 'user:'+id; console.log('User by Id--'+key); client.hgetall(key, function (err, obj) { if(err) console.log(err); console.log('get User by Id--'+obj); callback(err, obj); }); }
有待分析。。。