我很难掌握可观察对象的工作方式。 我正在开发一个 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
映射结果时,您可以返回一个包含 GetParent
和 GetPerson
响应的对象。
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/