Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Kue-TypeError:无法读取属性';zcard&x27;空的_Node.js_Redis_Kue - Fatal编程技术网

Node.js Kue-TypeError:无法读取属性';zcard&x27;空的

Node.js Kue-TypeError:无法读取属性';zcard&x27;空的,node.js,redis,kue,Node.js,Redis,Kue,在以下情况下,我得到的错误非常一致: 在浏览器窗口中打开kui ui仪表板 执行正常关机 我不确定Queue.client是否预期为空。如果是,则队列.prototype.card应首先检查此.client是否存在,然后再调用此.client.card。与Queue.prototype.cardByType相同 下面是我的api路由仪表板/停止代码(即停止进程并刷新缓存): 注意:queue是Kue的实例,client是redis的实例: exports.stop = function(succ

在以下情况下,我得到的错误非常一致:

  • 在浏览器窗口中打开kui ui仪表板
  • 执行正常关机
  • 我不确定
    Queue.client
    是否预期为空。如果是,则
    队列.prototype.card
    应首先检查
    此.client
    是否存在,然后再调用
    此.client.card
    。与
    Queue.prototype.cardByType相同

    下面是我的api路由
    仪表板/停止
    代码(即停止进程并刷新缓存):

    注意:
    queue
    Kue
    的实例,
    client
    redis
    的实例:

    exports.stop = function(success, failure) {
    
      let shutdown = new Promise((resolve, reject) => {
        debug('shutting down queue');
        queue.shutdown().then(() => {
          client.flushdb(); // flushing the redis server
          debug('redis is flushed');
          resolve({success: true});
        },
        (err) => {
          reject(err);
        });
      });
    
      return shutdown;
    
    };
    
    github上也提出了同样的问题:

  • 而且还没有回应


    任何想法/想法!如何获得此修复?

    问题是由于
    队列.prototype.shutdown
    实现销毁客户端(即redis)实例而导致的,这就是为什么它调用
    队列.prototype.card
    队列.prototype.cardByType
    时会抛出该错误

    至于我的目标是以某种方式停止(暂停)队列进程,然后再次恢复。。所以我没有使用
    Queue.prototype.shutdown
    而是使用
    Worker.prototype.shutdown
    来暂停Worker的(流程)

    queue.js
    (示例):

    serverRunner.js
    (示例):

    就这样

    希望这能帮助别人

    干杯

    exports.stop = function(success, failure) {
    
      let shutdown = new Promise((resolve, reject) => {
        debug('shutting down queue');
        queue.shutdown().then(() => {
          client.flushdb(); // flushing the redis server
          debug('redis is flushed');
          resolve({success: true});
        },
        (err) => {
          reject(err);
        });
      });
    
      return shutdown;
    
    };
    
    let queue = require('kue').createQueue({prefix: '', redis: config.get('redisurl'), jobEvents: false});
    
    let client = require('redis').createClient({
      'url': config.get('redis') // redis-url
    });
    
    this.queue = kue.createQueue({prefix: opts.prefix, redis: opts.redis, jobEvents: false, disableSearch: false}); // kue instance
    
    stopAllWorkers() {
        return new Promise((resolve, reject) => {
          var length = this.queue.workers.length;
          this.queue.workers.forEach((worker) => {
            worker.shutdown(() => {
              if (--length === 0) {
                resolve();
              }
            });
          });
        });
      }
    
    var queue = require('./queue');
    
    exports.start = function(success, failure) {
        // resume the queue process
    }
    
    exports.stop = function(success, failure) {
      return new Promise((resolve, reject) => {
        queue.removeAllListeners();
        queue.stopAllWorkers().then(() => {
          debug('Queue All workers stopped!!');
          resolve({success: true});
        });
      });
    };