2017-09-26 39 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