gpt4 book ai didi

javascript - 如何通过 RxJS 6 制作 SR Latch?

转载 作者:行者123 更新时间:2023-11-30 20:23:15 26 4
gpt4 key购买 nike

我想通过 RxJS 制作 SR 锁存器。它应该采用 2 个流(#1 和 #2)并且仅当 #1 发出某些东西时才发出。

然后它应该忽略 #1 并听取 #2 直到它发出一些东西。然后它应该“重置”(编辑:意味着停止发出 observables,但保持订阅)并开始收听 #1。

我做了一个快速的 jsfiddle:https://jsfiddle.net/fczjusqn/11/有这个错误 - 如果你按几次开始,它会让间隔开始几次。

这是在我的真实应用程序中使用有点复杂的设置逻辑模拟可暂停进程。

必填代码:

// 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'))

最佳答案

我建议创建一个 input$ observable,它只触发从开始到停止或停止到开始的变化值:

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());

这样,当您多次单击开始或停止时,它将被简单地忽略。使用此可观察对象,您可以简单地使用流,就像您已经在使用它一样。

Here is a fork of your example with my suggestion.

关于javascript - 如何通过 RxJS 6 制作 SR Latch?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51226667/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com