RangeError:超出最大调用堆栈大小 – nodejs,redis
我试图从redis删除大量的键(~20M),我得到一个错误RangeError:由于recursion调用超出最大调用堆栈大小 。 我试图在recursion调用中使用process.nextTick() ,但仍然得到相同的错误。
count = "100"; cursor = "0"; function scanRedis(key, callback){ redisClient.scan(cursor, "MATCH", key, "COUNT", count, function(err, reply){ if(err){ throw err; } cursor = reply[0]; if(cursor === "0" && reply[1].length === 0){ return callback(false, true); }else if(cursor === "0" && reply[1].length > 0){ redisClient.del(reply[1], function(deleteErr, deleteSuccess){ return callback(false, true); }); }else{ if(reply[1].length > 0){ delCount += reply[1].length; //console.log(reply[1]); redisMulti.del(reply[1]); } redisMulti.exec(function(deleteErr, deleteSuccess){ process.nextTick(function(){ scanRedis(key, function(err, reply){ //getting an error here callback(false, true); }); }); }); } }); };
我通过在scanRedis()
函数的callback函数中插入另一个process.nextTick()
来解决这个问题,它对我scanRedis()
。
redisMulti.exec(function(deleteErr, deleteSuccess){ process.nextTick(function(){ scanRedis(key, function(err, reply){ process.nextTick(function(){ callback(false, true); }); }); }); });
- 如何将全局/公共variables添加到grunt-contrib-uglify输出
- 可以将可写入的stream传送到可读或可读的stream
- 无法获取(通过URL作为参数)
- 如何在socket.io和node js上保护用户的“通道”?
- 在使用节点JS的DynamoDB查询中recursion提取所有项目
- Typescript错误:types'Request'中不存在属性'user'
- multer,multiparty和connect-multiparty + Nodejs之间的区别
- 我在哪里build立我的docker图像的阶段和生产环境运行我的咕build生成步骤?
- Angular – Node – 可以告诉节点从哪个路由请求块