Как проверить, пустой ли observable?

https://stackblitz.com/edit/angular-ivy-lcsphp

Не понимаю, как сделать проверку на observable, если он пустой:

<div *ngFor="let book of bookings$ | filterByStatus: 'pending' | async; trackBy: trackById" >

Это работает, пока существуют заказы со стасусом "pending". Но если таких нет, показывает ошибку "TypeError: Cannot read property 'filter' of undefined", что логично.

Вот как я фильтрую это в pipe:


    @Pipe({
      name: 'filterByStatus'
    })
    export class FilterByStatusPipe implements PipeTransform {
    
      transform(orders$: Observable, status: string): Observable {
        return orders$
          .pipe(map((o: Order[]) =>
            o.filter(o => o.status == status)))
      }
    }

Подскажите, пожалуйста.


Ответы (2 шт):

Автор решения: Nikita Reutov

Используйте оператор filter() внутри pipe() перед вызовом оператора map()

@Pipe({
      name: 'filterByStatus'
    })
    export class FilterByStatusPipe implements PipeTransform {
    
      transform(orders$: Observable, status: string): Observable {
        return orders$
          .pipe(
           filter(o => !!o),
           map((o: Order[]) =>
            o.filter(o => o.status == status))
          )
      }
    }
→ Ссылка
Автор решения: kompaniietst

Все оказалось гораздо проще

  transform(orders$: Observable, status: string): Observable {
    return orders$
      .pipe(map((orders: Order[]) => {
        if (orders) return orders.filter(o => o.status == status)
      }))
  }
→ Ссылка