我正在阅读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
是否在d
和g
之前。从源代码来看不是很明显,但是它会为图中的每个字符推进帧(
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/