我很难掌握可观察对象的工作方式。 我正在开发一个API,该API检索具有多个属性和两个“父母”的“人员”。 我正在使用mssql模块检索这些对象,该模块返回可观察值。 我的问题是,当我获得Observable时,我无法获得一个“父母”对象来填充函数返回的“ Person”(因为我又获得了另一个Observable)。
我了解到,地图操作员允许我编辑所发出的值,以借助“人员ID”填充“父母”字段。 但是似乎两个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字段。 (并且没有错误消息)
答案 0 :(得分:0)
您可以在此处使用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;});
答案 1 :(得分:0)
对不起,我还没有50个声誉,可以对您的信息发表评论。这不是一个适当的完整答案,但我真的想推荐这篇文章:https://medium.com/@shairez/a-super-ninja-trick-to-learn-rxjss-switchmap-mergemap-concatmap-and-exhaustmap-forever-88e178a75f1b