2017-04-11 5 views
5

Ist es möglich, die Sequenz mit Verzögerung auszuführen, wenn keine anderen Ereignisse kommen, und alle Werte auf einmal zurückzugeben?RxJS: debounceTime gibt alle Werte zurück

Ich brauche eine Art von debounceTime func, aber das wird alle Werte zurückgeben.

Antwort

4

Wenn ich richtig verstehe, benötigen Sie einen Operator, der Ereignisse puffert, bis für eine bestimmte Zeit kein Ereignis eintritt, und dann alle gepufferten Ereignisse wiederholt. Ich würde versuchen, diese:

Sets mit diesen neuen Betreibern zu dem beobachtbaren Prototyp:

function bufferedDebounceTime(time) { 
    return Observable.create(subscriber => { 
     let buffer = []; 
     return this.do(x => buffer.push(x)) 
      .debounceTime(time) 
      .flatMap(() => buffer) 
      .do(() => buffer = []) 
      .subscribe(
       value => subscriber.next(value), 
       err => subscriber.error(err), 
       () => subscriber.complete() 
      ); 
    }); 
} 

Observable.prototype.bufferedDebounceTime = bufferedDebounceTime; 

es dann als Operator verwenden:

yourSourceObservable.bufferedDebounceTime(1000).subscribe(...) 
Verwandte Themen