You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bull队列@OnQueueCompleted()是监听单个任务还是全部队列任务完成?

Bull队列@OnQueueCompleted()使用疑问解答

触发机制说明

  • @OnQueueCompleted() 会在队列中单个任务执行完成时立刻触发,不需要等待队列内所有任务全部完成。每有一个任务结束运行,该装饰器绑定的回调函数就会被调用一次。

单个任务返回值获取说明

  • 可以直接获取单个已完成任务的返回结果。@OnQueueCompleted()绑定的回调函数默认支持传入两个参数:
    1. 第一个参数为已完成的任务Job实例,可以从中获取任务ID、任务传入参数等元信息
    2. 第二个参数就是该任务执行完成后的返回值

代码示例

import { Processor, OnQueueCompleted } from '@nestjs/bull';
import { Job } from 'bull';

// 绑定对应队列
@Processor('demo-queue')
export class DemoQueueProcessor {
  // 任务处理逻辑
  async process(job: Job) {
    // 假设这里返回业务处理结果
    return {
      data: job.data,
      status: 'success'
    }
  }

  // 任务完成监听
  @OnQueueCompleted()
  handleTaskCompleted(job: Job, result: unknown) {
    // 直接打印当前完成任务的ID和返回结果
    console.log(`任务${job.id}完成,返回结果:`, result);
    // 可在此处执行完成后的后续业务逻辑
  }
}

额外注意

如果你需要监听队列内所有已加入的任务全部完成的事件,Bull本身没有提供原生的对应事件,需要自行实现计数逻辑:比如记录总入队任务数,每次@OnQueueCompleted()触发时累加已完成数,等两者相等时即为全量任务完成。


内容的提问来源于stack exchange,提问作者Erika

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 19:54:02