угловой, если внутри switchmap, чтобы проверить, не является ли значение null

#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;
    }
  }