Асинхронный провайдер в Nest
Значение иногда готовят не сразу: ждут сеть, файл или таймер. Контроллер не должен знать об этом ожидании в методе страницы.
useFactory может быть
асинхронной: она возвращает
обещание, Nest дождётся его
при старте приложения.
В метод страницы уже приходит
готовая строка, без await
в обработчике адреса.
Покажем на примере постов. Запишем асинхронную фабрику в провайдеры модуля:
import { Module } from '@nestjs/common';
import { PostController } from './post.controller.js';
@Module({
controllers: [PostController],
providers: [
{
provide: 'POSTS',
useFactory: async () => {
await new Promise((resolve) => {
setTimeout(resolve, 10);
});
return 'Posts ready';
},
},
],
})
export class AppModule {}
Контроллер получит готовую строку и сразу отдаст её:
import { Controller, Get, Inject } from '@nestjs/common';
@Controller('posts')
export class PostController {
label: string;
constructor(@Inject('POSTS') label: string) {
this.label = label;
}
@Get()
getPosts(): string {
return this.label;
}
}
Зарегистрируйте асинхронную
фабрику подписи списка
работников и отдайте готовое
значение из WorkerController
без ожидания в методе страницы.