nodejs 遇到的一个RangeError: Maximum call stack size exceeded 问题


及昨天的工作,正在写一个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);
	});
}

 有待分析。。。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM