我正在使用Angular 2和RxJs。我得到以下编译异常,
[ts]
Type 'Observable<Observable<B>>' is not assignable to type
'Observable<B>'.
Type 'Observable<B>' is not assignable to type 'B'.
Property 'id' is missing in type 'Observable<B>'.
以下是相关代码。我无法真正改变'getB'的方法签名,因为我正在覆盖它。基本方法不需要第二次API调用来填充子项,因此覆盖。
export interface A {
b: B;
}
export class B {
cList: C[];
}
export interface C {
name: string;
type: string;
}
getB(): Observable<B> {
let entries = <A[]> []; // get A[] via an server call
// in this case entries will have only one element in the array
return this.loadBChilds(entries[0])
.map(e => e.b);
}
loadBChilds(a: A): Observable<A> {
// API call to fetch childs
// set childs to a.b.List
return this.rest.get('someapi')
.map(res => {
res.record.map(r => this.setData(r));
return a;
});
}
知道如何实现这个目标吗?
TIA
答案 0 :(得分:0)
管理解决这个问题。解决方法是通过flatMap折叠从第一个API接收的第一个数组,然后将其用于后续的API调用。
getB(): Observable<B> {
return this.rest.get('firstapi')
.flatMap(res => {
let entries = res.record
.map(record => this.getEntry(record));
return this.loadBChilds(entries[0])
.map(e => e.b);
});
}