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

Данные события в Nest

Слушателю мало факта срабатывания: нужен заголовок новой строки или другие поля, которые сервис только что положил в память. Без передачи данных пришлось бы снова искать строку по всему массиву.

При публикации вторым аргументом передают объект. Слушатель получает его параметром метода реакции и читает нужные поля, не обращаясь к сервису напрямую.

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

import { Injectable } from '@nestjs/common'; import { EventEmitter2 } from '@nestjs/event-emitter'; @Injectable() export class PostService { posts: { title: string }[] = []; eventEmitter: EventEmitter2; constructor(eventEmitter: EventEmitter2) { this.eventEmitter = eventEmitter; } create(title: string): { title: string } { const post = { title }; this.posts.push(post); this.eventEmitter.emit('post.created', post); return post; } }

Слушатель сохранит заголовок из переданного объекта в поле класса:

import { Injectable } from '@nestjs/common'; import { OnEvent } from '@nestjs/event-emitter'; @Injectable() export class PostCreatedListener { lastTitle = ''; @OnEvent('post.created') handlePostCreated(payload: { title: string }) { this.lastTitle = payload.title; } }

Контроллер по-прежнему вызывает сохранение из тела запроса:

import { Body, Controller, Post } from '@nestjs/common'; import { PostService } from './post.service.js'; @Controller('posts') export class PostController { postService: PostService; constructor(postService: PostService) { this.postService = postService; } @Post() create(@Body('title') title: string) { return this.postService.create(title); } }

Передайте из WorkerService в сигнал объект с данными работника, а WorkerCreatedListener запишет их в поле класса.

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