我有两个不同的观测,我们称之为
小精灵
和
RACE2
,当发生两个不同的事件时发出。
如果
小精灵
我必须执行函数的逻辑
doToSuff1()
如果
Rrace2
发生我必须执行
doToSuff2()
.
Rrace1
和
Rrace2
不是相互排斥的,它们可以一个接一个地发生,但是我想要实现的是,如果它们中的任何一个发生,我只处理其中一个及其相关功能。
很明显,使用
race
RXJS的功能。
race(
racer_1.pipe(
tap(() => doStuff_1()),
finalize(() => console.log('racer 1 completed'))
),
racer_2.pipe(
tap(() => doStuff_2()),
finalize(() => console.log('racer 2 completed'))
)
)
不幸的是也许会发生
小精灵
先发射
T0
和
doToSuff1()
启动同步执行,其结束于
T0+1000
.
同时,在
T0+200
Rrace2
发射和执行
doToSuff2()
是很短的,所以它结束于
T0+300
.
在这种情况下,我看到的是
Rrace2
“赢得比赛”,其排放量继续得到处理,而
Rrace1
已完成。
相反,我想看到的是
小精灵
从它第一次出现起就赢了,即使它的处理可能需要很长时间才能完成。
有办法获得这种行为吗?