2017-09-26 40 views
0

我有兩個觀測刷新間隔形成另一個可觀測

const refreshClick$ = Observable.fromEvent(this.btn, 'click').startWith('click') 
const interval$ = Observable.interval(5000, 5000) 

this.subscription = interval$ 
    .merge(refreshClick$) 
    .flatMap(() => this.grabSomeData()) 
    .subscribe(newState => this.setState({newState})) 

有沒有一種方法來重置間隔或refreshClick $觀察到recieveing事件後延遲呢?所以在單擊事件之後,setState方法將被正常執行,但是間隔將在附加的例如後返回。 5s

回答

1

您可以使用switchMap操作符。一旦新的點擊來到,並開始一個新的間隔觀察,它將完成間隔觀察。

const refreshClick$ = Observable.fromEvent(this.btn, 
        'click').startWith('click'); 
const interval$ = Observable.interval(5000); 

refreshClick$.switchMap(()=>interval$) 
     .subscribe(x=>console.log(x)); 
+0

switchMap擋住了我的refreshClick $但我用它的份額和switchMap後合併它,所以它的工作原理,謝謝:d – erhardos