2017-02-06 15 views
2

debounceTimeの値を条件に基づいて変更することは可能ですか?私は特定のフィルタ条件に基づいて異なるようにデバウンス時間をたい条件に基づいた変数debounceTime

​​

、しかし、ときに私:私は(私もこの部分の間違ったをやっている場合は、私に教えてください)ように行動対象を設定していますそこに関数をスローしようとすると、VSコードはそれが無効であると文句を言う。

また、変数の型を取るように見えるdebounceを見ましたが、ドキュメントから、私はそれを把握しているように見えることができません(VSコードによると、文書化されたコードからコピーしたとしても)。違いがあれば、私はAngular 2でこれをすべてやっています。

答えて

2

.debounceTimeが関数を受け入れることを示唆したドキュメントはどこにありますか?よく次のシグネチャを持つhereを文書化されています

public debounceTime(dueTime: number, scheduler: Scheduler): Observable 

あなたが探している方法は、マニュアルに従っている、debounceである:ここで

Emits a value from the source Observable only after a particular time span determined by another Observable has passed without another source emission. 
It's like debounceTime, but the time span of emission silence is determined by a second Observable. 

はそれが署名だ次のとおりです。

public debounce(durationSelector: function(value: T): Observable | Promise): Observable 

したがって、あなたがしている動作を達成するために必要なことは、debouncの間隔を提供する別のObservableを設定することだけですe。

新しい待機時間を提供するためにアプリケーションロジックに従って.next()を呼び出すことができる別のSubjectを使用してこれを行うことができます。

let debounceSubject = new Subject<number>(); 
let debounceObservable$ = debounceSubject.asObservable(); 

// Somewhere else in code you'll do debounceSubject.next(1000); for example 

そして最後に、あなたはこのようなあなたの新しいデバウンスを設定します:.debounceを使用しての

this.searchSubject.asObservable() 
    .debounce(() => debounceObservable$).subscribe(x => this.emitFilters()) 

より多くの例がjsBinとjsFiddleでの作業例を含めhere(rxjsを学ぶための素晴らしいウェブサイトを)見つけることができます。

+0

フィードバックいただきありがとうございます。私はデバウンスのためのドキュメントを見ましたが、あなたが言ったように、それは観測可能物を使用します。私はそれを完全に見ていない限り(精神的な変化の観察が強制されている可能性が高い)、実際には私が望むことはしませんが、それらのドキュメントのおかげで、takeLast - > reduce - > filterのように見えます。どのように減らすかを理解することができます... – RhoVisions

+0

私はあなたの解決策を試してみることにしました。必要なSubjectを観測可能な状態にして、それを新しい値に適切に渡していても、デバウンスは行いません。どういうわけか、それも他のコードを壊したので、私は一般的な使用/構造が間違っていると推測しています:/助けてくれてありがとう。 – RhoVisions

+0

あなたが今どこにいるのか、あるいはPlunkerか何かのためのより完全なコードサンプルを与えることができれば、私は見て、助けてみることができます –

関連する問題