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); }); }); }); });