Bull队列@OnQueueCompleted()是监听单个任务还是全部队列任务完成?
Bull队列
@OnQueueCompleted()使用疑问解答 触发机制说明
@OnQueueCompleted()会在队列中单个任务执行完成时立刻触发,不需要等待队列内所有任务全部完成。每有一个任务结束运行,该装饰器绑定的回调函数就会被调用一次。
单个任务返回值获取说明
- 可以直接获取单个已完成任务的返回结果。
@OnQueueCompleted()绑定的回调函数默认支持传入两个参数:- 第一个参数为已完成的任务
Job实例,可以从中获取任务ID、任务传入参数等元信息 - 第二个参数就是该任务执行完成后的返回值
- 第一个参数为已完成的任务
代码示例
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
相关产品推荐
相关产品推荐

