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