如何阅读 RxJs mergeMap 弹珠图

How to read the RxJs mergeMap marble diagram

在这个 mergeMap 的弹珠图中,你怎么读这个表达式?

// Kind of, looks like an em-dash near the end
mergeMap(i => 10*i--10*i--10*i--|)

mergeMapi 映射到由字符串 10*i--10*i--10*i-| 表示的可观察对象。此字符串包含 marble syntax 表示在虚拟时间内发生的事件。

文档中使用的主要字符是:

  • - frame: 1 "frame" of virtual time passing
  • [a-z0-9] any alphanumeric character: Represents a value being emitted by the producer signaling next().
  • | complete: The successful completion of an observable. This is the observable producer signaling complete().
  • # error: An error terminating the observable. This is the observable producer signaling error().

所以 10--10--10-| 将是图片中第二个可观察值的表达式。 例如

const tens$ = timer(0, 4).pipe(take(3), mapTo(10))

10*i--10*i--10*i-| 是将 10--10--10-| 发出的每个值与 i 相乘时得到的可观察值的表达式。 例如

of(1,3,5).pipe(
  mergeMap(i => tens$.pipe(map(v => v*i)))
)