Javascript 带有回调的Nestjs事件发射器替代方案
我正在试验和学习nestjs,但我无法找到以下场景的适当解决方案: 模块用户 模块书 模块仪表板 dashboard是一个graphql,它解决了他调用图书服务和图书用户服务的需求 我只知道两种方法来解决一本书的顺序,同时更新用户信息 1-在graphql仪表板上使用一个突变,该突变还调用一个事件,该事件将由更新此新订单的相应服务侦听,下面是此用例的示例: 2-使用依赖注入,考虑到仪表板对用户和书籍的相应服务具有依赖性,只需更新所需的一切 问题是: 解决方案1事件不提供回调或响应,它作为一个事件的发射,我以后无法得到反馈,更像是一个动作或命令,而不是一个函数 解决方案2仪表板知道的太多了,我不需要将整个模块作为DI提供,以便在订单发生后只调用一个方法来更新用户信息 我需要什么,但我找不到任何东西。一个我可以在它被执行后监听的事件。。。换句话说,类似于以下内容:Javascript 带有回调的Nestjs事件发射器替代方案,javascript,node.js,typescript,nestjs,Javascript,Node.js,Typescript,Nestjs,我正在试验和学习nestjs,但我无法找到以下场景的适当解决方案: 模块用户 模块书 模块仪表板 dashboard是一个graphql,它解决了他调用图书服务和图书用户服务的需求 我只知道两种方法来解决一本书的顺序,同时更新用户信息 1-在graphql仪表板上使用一个突变,该突变还调用一个事件,该事件将由更新此新订单的相应服务侦听,下面是此用例的示例: 2-使用依赖注入,考虑到仪表板对用户和书籍的相应服务具有依赖性,只需更新所需的一切 问题是: 解决方案1事件不提供回调或响应,它作为一个事件
export interface OrderResults {
user: UserCustomer;
order: OrderCreated;
}
@Injectable()
export class Dashboard {
constructor(private reaonly eventEmitter: EventEmitter2): Promise<OrderResults> {}
async createOrder(order) {
const orderEventResults = await this.eventEmitter.emit('create.order', order)
return orderEventResults
}
}
导出接口订单结果{
用户:用户客户;
订单:创建订单;
}
@可注射()
导出类仪表板{
构造函数(私有reaonly eventEmitter:EventEmitter2):承诺{}
异步createOrder(订单){
const orderEventResults=等待这个.eventEmitter.emit('create.order',order)
返回orderEventResults
}
}
订单事件的结果是,用户和订单得到了正确的通知和更新,并与用户/订单侦听器的结果进行了解析
我的仪表板完全不知道如何或由谁来处理此事件,但会将处理此事件的服务解决此事件的结果提供给客户
欢迎对此提供任何帮助或指导。我不熟悉Nest,但它使用Nest的方法,因此应该可以:
const orderEventResults = await this.eventEmitter.emitAsync('create.order', order)
return orderEventResults
我认为您不能发出事件并等待它们的结果返回响应,所以我将使用解决方案2。如果你担心仪表板知道的太多,也许你可以用仪表板需要的东西来创建另一个服务(?)可能是rxjs或观察发生的事件,老实说,我听起来不像我有一个动作命令或事件,为什么没有一个我可以等待的其他服务的功能。也许这在框架的观点或范围上是一种不好的做法,或者也许我应该尝试不同的做法……你是对的,时间晚了,我刚刚看到emit返回给我一个布尔值,谢谢