私はmongodbの一連のレコードをループして、いくつかの処理のためにそれらをkueに入れています。実際には適用されないように見えるので、ここにすべてのコードを入れませんが、次のようなことをします:
var record;
for(var x = 0; x < results.length; x++){
record = results[x];
console.log(record);
queue.create("process_images", record).priority('normal').save();
}
この場合、ループでキューを作成しないなど、してはいけないことがあれば指摘してください。とにかく、console.log を実行すると、次のようなものが得られます。
{ id: 5577fe8a4b795f3c068fbb10,
collection_name: 'Image',
data_source: 'Mongo',
origin_dir: 'path to origin dir',
img_src: '/uploads/images/5577/5577fe8a4b795f3c068fbb10/IMG_0158.JPG' }
{ id: 5577feb84b795f3c068fbb11,
collection_name: 'Image',
data_source: 'Mongo',
origin_dir: 'path to origin dir',
img_src: '/uploads/images/5577/5577feb84b795f3c068fbb11/IMG_0018.JPG' }
これは私が期待するものです。
しかし、次のことを行うと、ウォッチャーで:
var queue = kue.createQueue();
queue.on('job complete', function(id, result) {
kue.Job.get(id, function(err, job){
if (err) return;
job.remove(function(err){
if (err) throw err;
console.log('Removed completed job #%d', job.id);
});
});
});
queue.process("process_images", function(job, done){
check_it(job.data, done);
});
function check_it(data, done) {
console.log("handling data");
console.log(data);
// email send stuff...
done();
}
私は以下を取得します:
Removed completed job #669
handling data
{ id: '55cd97a68c9f913608c5101b',
collection_name: 'Image',
data_source: 'Mongo',
origin_dir: 'path to origin dir',
img_src: '/uploads/images/55cd/55cd97a68c9f913608c5101b/11378154_422142334643881_2122676904_n.jpg' }
Removed completed job #670
handling data
{ id: '55cd97a68c9f913608c5101b',
collection_name: 'Image',
data_source: 'Mongo',
origin_dir: 'path to origin dir',
img_src: '/uploads/images/55cd/55cd97a68c9f913608c5101b/11378154_422142334643881_2122676904_n.jpg' }
何度も何度も。いつもそのレコードだけです。これは、私には見えない非同期状況があること、またはこれが実際に保存した最後のジョブであることを考えると、kue がどのように機能するかを完全に誤解していることを意味します。ここでの私の主な問題は、おそらく私が resque のやり方に慣れていることです。これは少しずれているようです。