我正在阅读Rxjs 6的大理石测试文档,并在“大理石语法”的“示例”部分下找到了此部分。

https://github.com/ReactiveX/rxjs/blob/master/docs_app/content/guide/testing/marble-testing.md#examples

这是我的问题的示例:


  '-(abc)-|':在第2帧发出a,b和c,然后在第8帧完成


为什么说第8帧完整?

对于上述字符串,我总共只算出5帧。字符串(abc)仅应计为一个帧。然后是另一个帧-,然后是完整的|

--(abc)-|
11  1  11 = sum(5)


所以我不明白为什么是第8帧,但是当我在使用大理石的单元测试中运行以上命令时,它输出它在第8帧完成了。

那么这3个额外的帧从哪里来?

最佳答案

这是因为事件在括号外时,仅根据其字符串位置计算框架。我相信主要原因是您仍然可以将多个大理石图相互放置,并且仍然易于阅读:

combineLatest([
  hot('-a--b-----c-d-e-|'),
  hot('--------f--g-h-i--j-|'),
  hot('--1--(234)---5-6---|'),
]);


您仍然可以轻松判断何时发出5。如果它按预期工作,则您必须手动减去帧以告知5是否在dg之前。

从源代码来看不是很明显,但是它会为图中的每个字符推进帧(advanceFrameBy(1)调用):

https://github.com/ReactiveX/rxjs/blob/master/src/internal/testing/TestScheduler.ts#L334

关于javascript - 为什么rxjs 6 marbles文档在第8帧上说“-(abc)-|”完成?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57998667/

10-13 07:24