node.js - 如何处理级联可观察值

标签 node.js asynchronous rxjs observable nestjs

我很难掌握可观察对象的工作方式。 我正在开发一个 API,用于检索具有多个属性和两个“父级”的“人”。 我正在使用 mssql 模块检索这些对象,该模块返回可观察值。 我的问题是,当我获取 Observable 时,我无法获取“Parent”对象来填充函数返回的“Person”(因为我正在获取另一个 Observable)。

据我了解, map 运算符允许我编辑发出的值,以在人员 ID 的帮助下填充“ parent ”字段。 但似乎两个 Observable 无法在 map 运算符中订阅:我的函数无需等待父级被填充就返回 Observable。

return this.SQLService.GetPerson().pipe(
  map((p: any): Person => {
    // This fills the Person object from the db returned object
    let returnValue = new Person(p);
    this.SQLService.GetParent(returnValue.ID).pipe(
      map((parentObj: any): Parent => { return new Parent(parentObj); })
    ).subscribe(
      (parentInstance: Parent): void => {returnValue.Parent1 = parentInstance;}
    );
  return returnValue;
})

来自同步开发,我希望我的 returnValue 实际上返回一个 Person,其中包含包含父级的 Person.Parent1 字段。 最后,我可以获得 Person,但没有 Parent1 字段。 (并且没有错误消息)

最佳答案

您可以使用switchMap在这里。

然后,当您从 GetParent 映射结果时,您可以返回一个包含 GetParentGetPerson 响应的对象。

return this.SQLService.GetPerson().pipe(
  switchMap((p: any): Person => {
    // This fills the Person object from the db returned object
    let returnValue = new Person(p);
    return this.SQLService.GetParent(returnValue.ID).pipe(
      map((parentObj: any): Parent => { return { parent: new Parent(parentObj), returnValue }; })
    );
  }),

).subscribe(({ parent, returnValue }): void => {returnValue.Parent1 = parentInstance;});

关于node.js - 如何处理级联可观察值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56597077/

相关文章:

rxjs - 我可以通过 Redux-Observable 使用 RxJS-DOM 而不是 RxJS

javascript - GraphQL 查询返回错误 .filter 不是函数

javascript - Node : Using fs. readFile 读取错误 : EISDIR: illegal operation on a directory,

javascript - 创建字符串模板并替换为数组内容

python - 使用 Tornado 的 gen.engine 内存泄漏

asynchronous - 在这种情况下,哪个更好-同步还是异步Web服务?

c# - 如何在不运行异步方法的情况下对异步方法的任务结果进行排队?

javascript - Node 程序/模块读取自己的package.json : is that possible?

javascript - 序列化可观察的下一个函数调用

javascript - 在 Angular 6 和 Rxjs 6 中取消挂起的 HTTP 请求并再次触发 fromEvent