可以尝试使用 Promise 和 Async/Await 解决这个问题。例如:
const { Queue, Worker } = require('bullmq');
async function main() {
const queue = new Queue('my-queue');
// 生产者
await queue.add('job-1', { data: 'data-1' });
await queue.add('job-2', { data: 'data-2' });
await queue.add('job-3', { data: 'data-3' });
// 消费者
const worker = new Worker('my-queue', async (job) => {
console.log(`Job ${job.name} processed with data: ${job.data}`);
});
// 等待队列中的所有任务都被消费完毕
await new Promise((resolve, reject) => {
worker.on('completed', async () => {
const count = await queue.getJobCounts();
if (count.waiting === 0 && count.active === 0) {
resolve();
}
});
});
console.log('All jobs completed');
}
main();
在上述代码中,生产者向队列中添加了三个任务,消费者对队列中的任务进行消费,当队列中的任务都被消费完毕后,使用 Promise 等待事件完成来实现 waitUntilFinished 函数的效果。