【发布时间】:2018-11-12 23:38:39
【问题描述】:
考虑以下获取实体并为每个 ID 属性加载相关模型的代码(加载外键对象):
if (!lazyLoad) {
return this.http.get(`${environment.endpoint}/file`, {
params: params
}).pipe(
mergeMap(res => this.loadModel(res, 'prop1ID')),
mergeMap(res => this.loadModel(res, 'prop2ID')),
mergeMap(res => this.loadModel(res, 'prop2ID'))
)
}
}
第一个合并工作,第二个得到undefind。
尝试阅读有关 merge 和 mergeAll 的信息,但没有成功。
来自http 请求的对象如下所示:
{
id: '1',
name: 'user',
prop1ID: 34,
prop2ID: 44,
prop3ID: 54
}
在这 3 个动作之后,我希望它看起来像(借助 loadModel() 函数):
{
id: '1',
name: 'user',
prop1ID: 34,
prop1IDModel: { ... },
prop2ID: 44,
prop2IDModel: { ... },
prop3ID: 54
prop3IDModel: { ... },
}
我的loadModel 功能:
private loadModel(entity, modelProperty): Observable<object> {
switch (modelProperty) {
case 'prop1ID':
this.generalService.getProp1ID(entity.prop1ID).subscribe((data) => {
entity.prop1IDModel = data;
return of(entity);
});
break;
case 'prop2ID':
...
break;
case 'prop3ID':
...
break;
default:
return of(entity);
}
}
【问题讨论】:
-
您确定
this.loadModel会返回任何内容吗? -
@martin 你说得对,我会发布我在 loadModel 中的内容
-
例如,您不会重新调整
case 'prop1ID'中的任何内容。 -
@martin
return of(entity); -
您不能从同步函数返回异步值。考虑从
loadModel返回一个Promise。
标签: typescript rxjs angular6 rxjs6