gpt4 book ai didi

javascript - NestJS 如何使用 async/await 配置中间件?

转载 作者:太空宇宙 更新时间:2023-11-04 01:30:43 25 4
gpt4 key购买 nike

我正在尝试在 NestJS 应用程序中使用 bull-arena。

export class AppModule {
configure(consumer: MiddlewareConsumer) {
const queues = this.createArenaQueues();
const arena = Arena({ queues }, { disableListen: true });
consumer.apply(arena).forRoutes('/system/queues');
}

createArenaQueues() {
return [
{
name: 'Notification_Emailer',
hostId: 'MyAwesomeQueues',
url: 'redis://localhost',
},
];
}
}

这有效!

但是由于从数据库加载队列,我需要对 createArenaQueues() 使用 async/await。

export class AppModule {
configure(consumer: MiddlewareConsumer) {
const queues = await this.createArenaQueues(); //await here
const arena = Arena({ queues }, { disableListen: true });
consumer.apply(arena).forRoutes('/system/queues');
}

async createArenaQueues() { // async here
return [
{
name: 'Notification_Emailer',
hostId: 'MyAwesomeQueues',
url: 'redis://localhost',
},
];
}
}

不起作用!

那么问题来了,如何处理这个问题?

从“系统” Controller 运行竞技场会很酷,但我无法找到一种方法来做到这一点。

此外,我尝试将 arena 移至独立中间件,但不知道我最终应该做什么:返回类似 res.send(arena) 的内容或什么?

处理此问题的最简单方法是异步配置支持,但尚未实现。

最佳答案

您可以创建 custom provider对于异步创建的 arenaQueues:

将自定义提供程序添加到您的 AppModule 的提供程序中:

providers: [
ArenaService,
{
provide: 'arenaQueues',
useFactory: async (arenaService: ArenaService) => arenaService.createArenaQueues(),
inject: [ArenaService],
},
],

然后将 arenaQueues 注入(inject)您的 AppModule 中:

export class AppModule {
constructor(@Inject('arenaQueues') private queues) {}

configure(consumer: MiddlewareConsumer) {
// Now, you can use the asynchronously created this.queues here
const arena = Arena({ queues: this.queues }, { disableListen: true });
consumer.apply(arena).forRoutes('/system/queues');
}

关于javascript - NestJS 如何使用 async/await 配置中间件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56239773/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com