我正在尝试在NestJS应用中使用斗牛竞技场。
Promise
这行得通!
但是由于从数据库加载队列,我需要对$.ajax({
url: 'url1',
success: function() {
console.log('URL1 call success');
$.ajax({
url: 'url2',
success: function() {
console.log('URL2 call success');
},
error:function() {
console.log('URL2 call error');
}
})
},
error: function() {
console.log('URL1 call error');
$.ajax({
url: 'url3',
success: function() {
console.log('URL3 call success');
},
error:function() {
console.log('URL3 call error');
}
})
}})
使用async / await。
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()
之类的东西?
处理此问题的最简单方法是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',
},
];
}
}
配置支持,但未实现。
答案 0 :(得分:0)
您可以为异步创建的arenaQueues
创建一个custom provider:
将自定义提供程序添加到您的AppModule
的提供程序中:
providers: [
ArenaService,
{
provide: 'arenaQueues',
useFactory: async (arenaService: ArenaService) => arenaService.createArenaQueues(),
inject: [ArenaService],
},
],
然后将arenaQueues
插入您的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');
}