node.jsqueuemessage-queuepriority-queuejob-queue

Bull Queue is not getting completed


Am new to Bull.I have tried running bull based on their documentation code. The Process are starting but my job is not getting completed, or am not sure whether its triggering complete event or not? Am not sure where am making a mistake

Attaching my code below

const Queue = require('bull');

const myFirstQueue = new Queue('my-first-queue', 
{
  redis: { 
      port: Config.redis.port, 
      host: Config.redis.host, 
      password: Config.redis.password 
  },
});



(async function ad() {
    const job = await myFirstQueue.add({
    foo: 'bar',
  });
})();

myFirstQueue.process(async (job, data) => {
  log.debug({ job, data }, 'Job data');
  let progress = 0;
  for (let i = 0; i < 10; i++) {
    await doSomething(data);
    progress += 10;
    job.progress(progress).catch(err => {
      log.debug({ err }, 'Job progress err');
    });
    log.debug({ progress }, 'After await');
  }

  return job;
});

const doSomething = data => {
  return new Promise((resolve, reject) => {
    return resolve(data);
  });
};

myFirstQueue.on('completed', (job, result) => {
  log.debug(`Job completed with result ${job}`);
});


myFirstQueue.on('progress', (job, progress) => {
log.debug(`Job progress with result ${job} ${progress}`);
});

I can see the logs which is inside the progress event handler but complete event is not getting triggered. Any help is appreciated


Solution

  • you need to call done() from process then only completed event will trigger.

    myFirstQueue.process(async (job, done) => {
      const data = job.data;
      let progress = 0;
      for (let i = 0; i < 10; i++) {
        await doSomething(data);
        progress += 10;
    
        job.progress(progress).catch(err => {
          log.debug({ err }, 'Job progress err');
        });
      }
    
      done();
    });