Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 带有回调的Nestjs事件发射器替代方案_Javascript_Node.js_Typescript_Nestjs - Fatal编程技术网

Javascript 带有回调的Nestjs事件发射器替代方案

Javascript 带有回调的Nestjs事件发射器替代方案,javascript,node.js,typescript,nestjs,Javascript,Node.js,Typescript,Nestjs,我正在试验和学习nestjs,但我无法找到以下场景的适当解决方案: 模块用户 模块书 模块仪表板 dashboard是一个graphql,它解决了他调用图书服务和图书用户服务的需求 我只知道两种方法来解决一本书的顺序,同时更新用户信息 1-在graphql仪表板上使用一个突变,该突变还调用一个事件,该事件将由更新此新订单的相应服务侦听,下面是此用例的示例: 2-使用依赖注入,考虑到仪表板对用户和书籍的相应服务具有依赖性,只需更新所需的一切 问题是: 解决方案1事件不提供回调或响应,它作为一个事件

我正在试验和学习nestjs,但我无法找到以下场景的适当解决方案:

模块用户

模块书

模块仪表板

dashboard是一个graphql,它解决了他调用图书服务和图书用户服务的需求

我只知道两种方法来解决一本书的顺序,同时更新用户信息

1-在graphql仪表板上使用一个突变,该突变还调用一个事件,该事件将由更新此新订单的相应服务侦听,下面是此用例的示例:

2-使用依赖注入,考虑到仪表板对用户和书籍的相应服务具有依赖性,只需更新所需的一切

问题是:

解决方案1事件不提供回调或响应,它作为一个事件的发射,我以后无法得到反馈,更像是一个动作或命令,而不是一个函数

解决方案2仪表板知道的太多了,我不需要将整个模块作为DI提供,以便在订单发生后只调用一个方法来更新用户信息

我需要什么,但我找不到任何东西。一个我可以在它被执行后监听的事件。。。换句话说,类似于以下内容:

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返回给我一个布尔值,谢谢