РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
⊗jsnsSpQuDy 104 of 201 menu
◀ ▶

Отложенная задача в Nest

Некоторые шаги не должны стартовать сразу после ответа клиенту: письмо или напоминание логичнее запустить через короткую паузу, не держа метод страницы занятым.

BullMQ принимает настройки задачи третьим аргументом при постановке. Поле delay задаёт паузу в миллисекундах до того, как запись станет доступна обработчику.

Покажем на примере постов:

import { Injectable } from '@nestjs/common'; import { InjectQueue } from '@nestjs/bullmq'; import { Queue } from 'bullmq'; @Injectable() export class PostService { postQueue: Queue; constructor(@InjectQueue('posts') postQueue: Queue) { this.postQueue = postQueue; } async scheduleReminder(title: string) { await this.postQueue.add( 'post-reminder', { title }, { delay: 5000 }, ); } }

Обработчик срабатывает только после паузы и фиксирует заголовок:

import { Processor, WorkerHost } from '@nestjs/bullmq'; import { Job } from 'bullmq'; @Processor('posts') export class PostProcessor extends WorkerHost { remindedTitle = ''; async process(job: Job<{ title: string }>) { if (job.name === 'post-reminder') { this.remindedTitle = job.data.title; } } }

Поставьте из WorkerService задачу с паузой, а WorkerProcessor после срабатывания запишет данные в поле класса.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить