我的流定义如下
export class MyComponent implements OnInit {
things$: Observable<Thing[]>;
constructor(private fooService: FooService) {
}
ngOnInit() {
this.things$ = this.fooService.getFoos() // Observable<Foo[]>
.pipe(
mergeAll(),
map(foo => this.thingService.getThing(foo.thingId)), // Observable<Thing>
zipAll()
);
}
}
我想要实现的是
Foo[]
与Foo
分成单个mergeAll
的序列Thing
为每个Foo
获取一个map
Thing
将我所有的Thing[]
合并到zipAll
现在这是我的模板
<div *ngIf="(things$ | async) as things; else loading">
<ng-container *ngIf="things.length">
<div *ngFor="let thing of things">
{{ thing.someAttr }}
</div>
</ng-container>
</div>
<div #loading>LOADING</div>
正如标题所述,我处于加载状态,异步管道永远无法解析。我在做什么错了?
答案 0 :(得分:0)
方法可能会有所不同。由于Observable本身包含一个数组,因此您需要在map函数中处理它。在这种情况下,不需要mergeAll
和zipAll
。
this.things$ = this.fooService.getFoos() // Observable<Foo[]>
.pipe(
map(foos => {
let temp = [];
foos.forEach(function(foo) {
temp.push(this.thingService.getThing(foo.thingId));
});
return temp;
});