【发布时间】:2019-09-21 22:06:00
【问题描述】:
我正在尝试实现这样的东西:
// 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)
);
现在这显然是不可编译的废话,因为我们在创建它之前尝试samplea,但希望它使我的意图明确:a 发出的每个值都应该依赖于 @ 之前发出的旧值之一987654325@。 a 的旧值取决于 c 上次发出某些东西的时间。这有点像在a 上调用pairwise,除了我不想要最后两个值,而是最新的和更远的另一个值。
请注意,如果不是startWith(aInitial) 位,这甚至不是一个定义明确的问题,因为a 发出的第一个值将被循环定义,引用它自己。但是,只要单独指定第一个值a,构造就具有数学意义。我只是不知道如何以干净的方式在代码中实现它。我的预感是,通过编写某种自定义主题会是一种冗长的方式,但更优雅的东西会非常受欢迎。
为了更具体一点,在我的用例中,我处理的是单击并拖动到平移类型的 UI 元素。 m 是 mousemove 事件的 Observable,c 是 mousedown 事件的 Observable。然后,a 将根据光标所在的位置以及单击发生时a 的值不断变化。
【问题讨论】:
标签: javascript rxjs reactivex