Существует три проблемы: во-первых, res['bases']
не является наблюдаемым и поэтому не может быть передан по трубопроводу.Этот вызов функции невозможен:
res['bases'].pipe(...)
Во-вторых, вы пытаетесь присвоить Observable свойству this.bases
, которое имеет тип Base[]
, а не Observable<Base[]>
.Следовательно, назначение не будет действительным.
В-третьих, даже если бы res['bases']
было Наблюдаемым, вы никогда не подписались бы на него, поэтому оно никогда не будет отправлять никаких уведомлений.
Решениес одной стороны, чтобы не подписываться до switchMap
, но потом, а с другой стороны, чтобы правильно обрабатывать коллекцию массивов, например, с zip
.Вот как это будет выглядеть:
this.baseService.getAllBases().pipe(
switchMap(bases =>
zip(...bases.map(base =>
this.getOrg(base.id).pipe(
map(base => Object.assign(base, {orgs: this.orgs}))
)
)
)
)
).subscribe(bases =>
this.bases = bases
)
Теперь еще одна проблема заключается в том, что вы не ждете, пока loadOrgs
сразится, прежде чем пытаться загрузить базы.Это также следует объединить следующим образом:
loadOrgs(): Observable<Organization[]> {
return this.orgService.getOrgs().pipe(
tap(
res => {
this.orgs = res['orgs'];
console.log(this.orgs);
}
)
)
}
И в ngOnInit
:
ngOnInit() {
this.loadOrgs().subscribe(() => {
this.loadBases();
});
}
Как правило, всегда подписывается наваши Observables, иначе вы на самом деле ничего не выполните.Существуют некоторые каналы, которые подписываются на внутренние Observables, например switchMap
, но на самом деле для канала switchMap
должен быть подписчик, чтобы он вступил в силу.