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