繁体   English   中英

RangeError:超出最大调用堆栈大小 - nodejs,redis

[英]RangeError: Maximum call stack size exceeded - nodejs, redis

我正在尝试从redis中删除大量的密钥(~20M)并且我收到错误RangeError:由于过多的递归调用而超出了最大调用堆栈大小 我尝试在递归调用中使用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()函数的回调中插入另一个process.nextTick()来解决这个问题,它对我scanRedis()

redisMulti.exec(function(deleteErr, deleteSuccess){
  process.nextTick(function(){
    scanRedis(key, function(err, reply){ 
      process.nextTick(function(){
        callback(false, true);
      });
    });
  });
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM