node.js - Bull 队列尚未完成

标签 node.js queue message-queue priority-queue job-queue

我是 Bull 的新手。我尝试根据他们的文档代码运行 bull。流程正在启动,但我的工作尚未完成,或者不确定它是否触发完成事件?不确定哪里出错了

附上我的代码

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

我可以看到进度事件处理程序内的日志,但未触发完整事件。任何帮助表示赞赏

最佳答案

您需要从流程中调用done(),然后只有完成的事件才会触发。

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

关于node.js - Bull 队列尚未完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56256609/

相关文章:

javascript - 如何(SELECT *)node.js 中的两个 mysql 表(express)

node.js - 无法在 Facebook 中获取访问 token

node.js - 带有 VST 效果插件的网络音频播放器?

java - 代码似乎超出范围,如何修复? (简单队列-ADT程序)

lua - 在Lua中快速执行队列?

jquery - 队列任务 jQuery

javascript - Node.js 可以排队多少个事件?

sql-server - SQL Server Service Broker 的缺点

node.js - 如何允许 Google App Engine 访问 Google Cloud PostgreSQL

mysql - fork 还是不 fork ?