rxjs5では、Throttler
クラスを実装しようとしています。キュークリアを使用したRxJSの無制限レート制限
import Rx from 'rxjs/rx';
export default class Throttler {
constructor(interval) {
this.timeouts = [];
this.incomingActions = new Rx.Subject();
this.incomingActions
.concatMap(action => Rx.Observable.just(action).delay(interval/2))
.subscribe(action => action());
}
clear() {
// How do I do this?
}
do(action) {
this.incomingActions.next(action);
}
}
次不変量を保持しなければならない:do
に渡されたすべてのアクションがアクションキュー
に追加さ
アクションキューが順序及び一定の間隔で処理されます決定されるようにコンストラクタパラメータで
を使用してアクションキューをクリアすることができます。
私の現在の実装では、上記のように固定間隔が処理されますが、キューのクリア方法はわかりません。また、キューが空であっても、すべてのアクションがinterval/2
ミリ秒遅れるという問題があります。
P.S.私がインバリアントを記述する方法は、setIntervalと配列をキューにした実装に非常に簡単にマップできますが、Rxでこれをどうやって行うのでしょうか。