2016-07-29 9 views
0

私はRxjs Observablesを初めて使用しており、Rxjsを使用してスロットルを実装する必要があります。RXJS観測値を使用したスロットル実装

_.throttle(functionName, timespan, {trailing : true/false}). 

親切に観測していることを行うにはどのように支援する - 次の行にすることを私たちはアンダースコアで

答えて

1

だけthrottle演算子を使用します。

Rx.Observable.fromEvent(window, 'mousemove') 
    .throttle(500) 
    .subscribe(x => console.log(x)); 

500ミリ秒の1つのウィンドウで1つのイベントしか通過できないようにイベントを絞り込みます。

+0

ありがとうございます。ちょうど明確化が必要でした。 Rx.Observables.fromEventはイベントを待ち受けます(mousemoveのように)。どうしたらイベントを聞きたくない場合は、機能を絞りたいだけですか?私の質問が有効であることを願っています。親切でない場合は助けてください。私が言ったように、私は以下の機能を模倣したいと思う。 –

+0

解決策をハックすることができますが、これは他の回答が示唆しているとおりですが、実際には「Rx」ソリューションではありません。私の質問はなぜそれが機能でなければならないのだろうか?その機能を何と呼びますか?通常Rxでは、ソースから始まり、タスク全体をパイプラインで構築するという考えがあります。 – paulpdaniels

0

ここ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>

+0

ありがとうございます。しかし、fromEventのように、別のメソッドを入力として受け取り、他のメソッドを使ってそれを絞り込むメソッドはありますか? –

+0

@PushkarKathuria私は本当にあなたが望むものを手に入れませんでしたが、私は自分の答えを編集して、スロットルのsimlarをアンダースコアからRxJsを使って見ることができます。クリックすると毎秒機能を起動します。 – sielakos

+0

イベントのみで動作しますか?それが愚かに聞こえるならば、謝罪する。しかし、私が実行する必要があるタスクは、単に関数呼び出しを抑制することです。 - _.throttle(function、timespan、{trailing:true/false}) 上記の行は、特定のタイムパンの関数を絞り込み、後で呼び出します。 問題を明確にできることを願っていますか? –

関連する問題