忽略switchMap返回值

Gab*_*mas 4 rxjs

我想解析一个observable,但我不希望返回值替换管道中的前一个值.有异步tap()吗?我需要一个像a的运算符,switchMap但我想忽略返回.

of(1).pipe(switchMap(() => of(2))).subscribe(console.log); // expected: 1
Run Code Online (Sandbox Code Playgroud)

我可以创建一个自定义运算符,但确定rxjs中内置了一些内容.

Gab*_*mas 6

我最终得到了这个自定义运算符.它就像点击但解析了observable(并且应该更新以支持promises).

export function switchTap<T, R>(next: (x: T) => Observable<R>): MonoTypeOperatorFunction<T>;
export function switchTap<R>(observable: Observable<R>): MonoTypeOperatorFunction<R>;
export function switchTap<T, R>(
  arg: Observable<T> | ((x: T) => Observable<R>)
): MonoTypeOperatorFunction<T> {
  const next: (x: any) => Observable<T | R> =
    typeof arg === 'function' ? arg : (x: any): Observable<T> => arg;
  return switchMap<T, T>(value => next(value).pipe(ignoreElements(), concat(of(value))));
}
Run Code Online (Sandbox Code Playgroud)

用法:

of(1).pipe(switchTap(of(2))).subscribe(console.log) // 1
Run Code Online (Sandbox Code Playgroud)

或具有功能:

of(1)
      .pipe(
        switchTap(value => {
          console.log(value); // value: 1
          return of(value + 1);
        })
      )
      .subscribe(console.log); // 1
Run Code Online (Sandbox Code Playgroud)