在 RxJS 中环回可观察?

Loop back observable in RxJS?

这个例子有点绕,但我想知道如何在 RxJs 中执行以下操作:在管道中的某个部分之后,将值反馈到管道的较早部分,因此它会得到再次处理。

of(1, 2, 3, 4, 5).pipe(
  map(x => x + 1),
  map(x => x + 1),
  filter(x => x % 2),
  // refeed after the first map but before the second
)

下面是您可以如何使用 expand 执行此操作的示例:

function isEven(x) {
  return x % 2 == 0
}

of(1, 2, 3, 4, 5).pipe(
  map(x => x + 1),
  expand(x => of(x).pipe(
    map(x => x + 1),
    filter(isEven)
  ))
);

下面是编写递归函数的方法:

function isEven(x) {
  return x % 2 == 0
}

function loopBack(x : number) {
  return of(x).pipe(
    map(x => x + 1),
    filter(isEven),
    mergeMap(loopBack),
    startWith(x)
  );
}

of(1, 2, 3, 4, 5).pipe(
  map(x => x + 1),
  mergeMap(loopBack),
);