Rx JS: Как правильно выводить пустое значение как начальное? - PullRequest
3 голосов
/ 24 марта 2020

В примере вы можете видеть, что если вам требуется начальное значение для потока типа void, оно выглядит некорректно.

import { of, fromEvent, concat, Subject } from "rxjs";
import { map, switchMap, take, finalize } from "rxjs/operators";

let sequence = 1;
const trigger = new Subject<void>();
const source = concat(
  of(""), // is there any way to make it more pretty?
  trigger
).pipe(
  switchMap(() =>
    fromEvent(document, "click").pipe(
      take(3),
      finalize(() => {
        sequence++;
        trigger.next();
      })
    )
  ),
  map(
    ({ clientY }: MouseEvent) => `sequence: ${sequence} clientY: ${clientY}!`
  )
);

source.subscribe(x => console.log(x));

1 Ответ

1 голос
/ 24 марта 2020

Не уверен, что есть более «красивое» решение, чем это:

const source =
  trigger.pipe(
    startWith(undefined as void),
    switchMap(...),
    ...
  );
...