我想通过RxJS制作SR锁存器。它应该采用2个流(#1和#2),并且仅在#1发出某种东西时才发出。
然后它应该忽略#1并听#2直到发出一些东西。然后,它应该“重置”(编辑:表示停止发出可观察的数据,但保留订阅)并开始收听#1。
我做了一个快速的jsfiddle:https://jsfiddle.net/fczjusqn/11/的错误-如果您多次按start,它将使间隔启动多次。
这是在我的真实应用中模拟具有某些复杂设置逻辑的可暂停过程。
强制性代码:
// const start$ = ...
// const stop$ = ...
start$.pipe(
flatMap(() => {
// some setup logic...
// ...creating another stream...
// ...still setting up...
return Rx.interval(1000)
.pipe(
takeUntil(stop$)
)
})
).subscribe(() => console.log('interval'))
答案 0 :(得分:1)
我建议创建一个input$
可观察对象,该对象仅从开始到停止或从停止到开始都触发更改的值:
const start$ = Rx.fromEvent(document.querySelector('#start'), 'click').pipe(op.mapTo(true));
const stop$ = Rx.fromEvent(document.querySelector('#stop'), 'click').pipe(op.mapTo(false));
const input$ = Rx.merge(start$, stop$).pipe(op.distinctUntilChanged());
这样,当您多次单击启动或停止时,将被忽略。使用此可观察的对象,您可以像使用流一样简单地使用它。