私はRxjs Observablesを初めて使用しており、Rxjsを使用してスロットルを実装する必要があります。RXJS観測値を使用したスロットル実装
_.throttle(functionName, timespan, {trailing : true/false}).
親切に観測していることを行うにはどのように支援する - 次の行にすることを私たちはアンダースコアで
。
私はRxjs Observablesを初めて使用しており、Rxjsを使用してスロットルを実装する必要があります。RXJS観測値を使用したスロットル実装
_.throttle(functionName, timespan, {trailing : true/false}).
親切に観測していることを行うにはどのように支援する - 次の行にすることを私たちはアンダースコアで
。
だけthrottle
演算子を使用します。
Rx.Observable.fromEvent(window, 'mousemove')
.throttle(500)
.subscribe(x => console.log(x));
500ミリ秒の1つのウィンドウで1つのイベントしか通過できないようにイベントを絞り込みます。
ここRxJs
でsample演算子を見ては、divの上のMouseMoveイベントでの簡単な例です。
const source = document.getElementById('source');
Rx.Observable
.fromEvent(source, 'mousemove')
.sample(1000)
.map(event => ({x: event.offsetX, y: event.offsetY}))
.subscribe(console.log);
#source {
width: 400px;
height: 400px;
background-color: grey;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/4.1.0/rx.all.js"></script>
<div id="source"></div>
あなたはこのようにそれを行うことができますRxJS使用してスロットルを実装する場合:
function throttle(fn, delay) {
const subject = new Rx.Subject();
subject
.sample(delay)
.subscribe(args => fn(...args));
return (...args) => subject.onNext(args);
}
const sourceBtn = document.getElementById('source');
const countSpan = document.getElementById('count');
let count = 0;
sourceBtn.addEventListener('click', throttle(() => {
count++;
countSpan.innerHTML = count;
}, 1000));
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/4.1.0/rx.all.js"></script>
<button id="source" type="button">click</button> <br>
count = <span id="count"></span>
ありがとうございます。しかし、fromEventのように、別のメソッドを入力として受け取り、他のメソッドを使ってそれを絞り込むメソッドはありますか? –
@PushkarKathuria私は本当にあなたが望むものを手に入れませんでしたが、私は自分の答えを編集して、スロットルのsimlarをアンダースコアからRxJsを使って見ることができます。クリックすると毎秒機能を起動します。 – sielakos
イベントのみで動作しますか?それが愚かに聞こえるならば、謝罪する。しかし、私が実行する必要があるタスクは、単に関数呼び出しを抑制することです。 - _.throttle(function、timespan、{trailing:true/false}) 上記の行は、特定のタイムパンの関数を絞り込み、後で呼び出します。 問題を明確にできることを願っていますか? –
ありがとうございます。ちょうど明確化が必要でした。 Rx.Observables.fromEventはイベントを待ち受けます(mousemoveのように)。どうしたらイベントを聞きたくない場合は、機能を絞りたいだけですか?私の質問が有効であることを願っています。親切でない場合は助けてください。私が言ったように、私は以下の機能を模倣したいと思う。 –
解決策をハックすることができますが、これは他の回答が示唆しているとおりですが、実際には「Rx」ソリューションではありません。私の質問はなぜそれが機能でなければならないのだろうか?その機能を何と呼びますか?通常Rxでは、ソースから始まり、タスク全体をパイプラインで構築するという考えがあります。 – paulpdaniels