Излучение горячего логического значения, наблюдаемого с помощью switchMap? - PullRequest
0 голосов
/ 20 сентября 2018

Попытка создать метод isEmpty:Observable<boolean>, который генерирует горячий Observable<boolean> с использованием switchMap.Это то, что у меня пока есть:

<code>  /**
   * Notifies observers when the store is empty.
   */
  protected notifyOnEmpty = new ReplaySubject<E[]>(1);

  /**
   * Check whether the store is empty.
   * 
   * @return A hot {@link Observable<boolean>} that indicates whether the store is empty.
   * 
   * @example
     <pre>
    source.isEmpty();
    
* / isEmpty (): Observable {const isCurrentlyEmpty = values ​​(this.entries) .length == 0;вернуть this.notifyOnEmpty.pipe (startWith (isCurrentlyEmpty), switchMap ((записи: E []) => records.length == 0));}

Предполагается, что магазин может затем позвонить notifyOnEmpty.next(Object.values(this.entries)), чтобы сообщить подписчикам, пусто ли хранилище.

В любом случае оператор switchMap приводит к ошибке:

[ts] Аргумент типа '(entry: E []) => boolean' нельзя назначить параметру типа '(значение: E [], index: number) => ObservableInput'.Тип «логический» нельзя назначить типу «ObservableInput».записи (параметра): E []

Мысли?

1 Ответ

0 голосов
/ 20 сентября 2018

Оператор switchMap используется для выбора новой наблюдаемой для каждого значения.Вам нужен только обычный map, чтобы каждый Array отображался в boolean:

import { map, startWith } from 'rxjs/operators';

// ...

isEmpty<E>():Observable<boolean> {
  return this.notifyOnEmpty.pipe(
    startWith(values(this.entries)), 
    map((entries:E[]) => entries.length == 0)
  );
}
...