【发布时间】:2019-06-14 11:16:25
【问题描述】:
我很难掌握可观察对象的工作方式。 我正在开发一个 API 来检索一个具有多个属性和两个“父级”的“人”。 我正在使用返回 observables 的 mssql 模块检索这些对象。 我的问题是,当我获得 Observable 时,我无法获得一个“父”对象来填充我的函数返回的“Person”(因为我正在获得另一个 Observable)。
我知道 map 运算符允许我在 Person ID 的帮助下编辑发出的值以填充父母字段。 但是在map操作符中好像不能订阅两个Observable:我的函数返回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 字段。 (并且没有错误消息)
【问题讨论】:
-
您可能正在寻找
mergeMap或concatMap运算符 -
@martin:我不太明白如何使用它。如果我将它放在 GetPerson 映射运算符之后(如果我理解所有内容,它将 Person 的 Observable 传递给下一个运算符),我如何返回 Parent 以放入 Person?我是否必须创建一个包含两个对象的中间对象?
标签: node.js asynchronous rxjs observable nestjs