我正在尝试实现这样的事情:
// This obviously doesn't work, because we try to refer to `a` before it exists.
// c and m are some Observables.
const aSampled = a.pipe(
rxjs.operators.sample(c),
rxjs.operators.startWith(aInitial)
);
const a = m.pipe(
rxjs.operators.withLatestFrom(aSampled),
map(([mValue, oldAValue]) => {
// Do something.
}),
rxjs.operators.startWith(aInitial)
);
Run Code Online (Sandbox Code Playgroud)
现在这显然是无法编译的废话,因为我们sample a在创建它之前就尝试这样做,但是希望它使我的意图很明确:每个发出的值a都应依赖于之前发出的旧值之一a。的哪个旧值a由上次c发出某种东西的时间决定。这有点像调用pairwise上a,但我不希望最后两个值,而是从更靠后的最新和另一个。
请注意,如果不是startWith(aInitial)位,这甚至不是一个定义明确的问题,因为by发出的第一个值a将循环引用其自身来定义。但是,只要a分别指定第一个值,该构造就具有数学意义。我只是不知道如何以干净的方式在代码中实现它。我的直觉是,通过编写某种自定义主题可以有一种long回的方式,但是更优雅的做法将是非常受欢迎的。
为了使这一点更加具体,在我的用例中,我处理的是UI元素的单击并拖动到平移类型。m是mousemove事件的可观察性,c是事件的可观察性mousedown。a然后,它将根据光标所在的位置以及a …