#angular
#угловой
Вопрос:
следующая функция извлекает данные (accountsummary) из внешнего источника. Данные обогащаются отдельным вызовом, который получает URL каждого счета (getInvoice()).
readAccountSummary(id) {
console.log(id);
this.zuoraService
.getAccountSummary(id)
.pipe(
switchMap(
(accountSummary): any => {
if (accountSummary.invoices.length) {
forkJoin(
accountSummary.invoices.map(invoice =>
this.getInvoice(invoice.id)
)
).pipe(
map(invoices => {
accountSummary.invoices = accountSummary.invoices.map(
(invoice, i) => ({ ...invoice, ...invoices[i] })
);
return accountSummary;
})
);
} else {
return accountSummary;
}
}
)
)
.subscribe(accountSummary => {
this.accountSummary = accountSummary;
console.log(this.accountSummary);
this.portal = new ComponentPortal(this.data.component);
});
}
getInvoice(id: string) {
return this.zuoraService.getInvoice(id);
}
Мне удалось вставить оператор if, но интерфейс выдает следующую ошибку:
core.js:14597 ОШИБКА TypeError: Вы предоставили недопустимый объект там, где ожидался поток. Вы можете предоставить Observable, Promise, Array или Iterable.
в subscribeTo (subscribeTo.js:41)
при subscribeToResult (subscribeToResult.js:11)
в SwitchMapSubscriber.push../node_modules/rxjs/_esm5/internal/operators/switchMap.js.SwitchMapSubscriber. _innerSub (switchMap.js:51)
в
Ответ №1:
решается с помощью обходного пути: не стесняйтесь вносить лучшие ответы.
Прямо сейчас вызываю accountsummary дважды:
readAccountSummary(id) {
console.log(id);
this.zuoraService.getAccountSummary(id).subscribe(accountSummary => this.accountSummary = accountSummary);
console.log('accountsummary vor invoice Suche', this.accountSummary)
if(this.accountSummary.invoices.length >0 ){
this.zuoraService
.getAccountSummary(id)
.pipe(
switchMap(accountSummary =>
forkJoin(
accountSummary.invoices.map(invoice => this.getInvoice(invoice.id))
).pipe(
map(invoices => {
accountSummary.invoices = accountSummary.invoices.map(
(invoice, i) => ({ ...invoice, ...invoices[i] })
);
return accountSummary;
})
)
)
)
.subscribe(accountSummary => {
this.accountSummary = accountSummary;
console.log('accountSummary', this.accountSummary);
this.portal = new ComponentPortal(this.data.component);
});
} else {
console.log('returned accountSummary im else', this.accountSummary)
return this.accountSummary;
}
}