Javascript 可观测的循环依赖

Javascript 可观测的循环依赖,javascript,monads,reactive-programming,mostjs,Javascript,Monads,Reactive Programming,Mostjs,我有许多具有循环依赖性的流 import input from './input' const streamA = input.thru( someUsageOf_streamC ); const streamB = input.thru( someOtherUsageOf_streamC ); const streamC = most.merge( streamA.constant('A'), streamB.c

我有许多具有循环依赖性的流

import input from './input'

const streamA = input.thru( someUsageOf_streamC );
const streamB = input.thru( someOtherUsageOf_streamC );
const streamC = most.merge(
                    streamA.constant('A'),
                    streamB.constant('B'),
                );
通过(…)传递给
.thru(…)
的函数采用流并应用一些运算符组合,例如
.filter()
.map()
.until()
,但值得注意的是(请参见下文了解原因),
.delay()

这些是我已经尝试过的事情:

方法1 这里的问题是,您必须提前将流传递给采样,但是在
streamA
streamB
之前不能声明
streamC

方法2(或1.1) 此方法建立在方法1的基础上,但只是将事件从
streamC_proxy
代理到
streamC
,可以使用预先声明

我认为这实际上是可行的,但它不可使用测试(它需要使用自己的调度程序,但
.subscribe()
/
.observe()
隐式使用
defaultScheduler
)。正如我所说的,我使用
.delay()
,而使用默认的调度程序等待测试运行的秒/分钟是不可行的

方法3 除了此代码远不理想之外,它还应该工作:(

问题:
这能以可测试的方式完成吗?

让我想起了cycle js是如何工作的。我相信它们提供了一个虚拟值来规避循环依赖性。创建者有一个egghead io课程来描述框架是如何工作的-我相信这就是我们讨论的课程
const someUsageOf_StreamC = streamX =>
    streamX.sample( (x,c) => [x,c], streamX, streamC )
           .filter( ([x,c]) => c === 'something' )
           .map( ([x,c]) => x );
import { subject } from 'most-subject'

const streamC = subject();

const streamA = ...;
const streamB = ...;
const streamC_proxy = most.merge( /* ...as above... */ );

streamC_proxy.subscribe( streamC );
import hold from '@most/hold'

const someUsageOf_StreamC = streamX =>
    streamX.flatMap( x => streamC.take(1) // @most/hold
                                 .filter( c => c === 'something' )
                                 .constant(x) )
           .multicast();

const streamA = ...;
const streamB = ...;
const streamC = most.merge( ... ).thru( hold );