2017-04-13 35 views
0

我有一個可觀察的canContinue: Subject<boolean>。我想在延遲100毫秒後再打電話,你會如何在rxjs中執行此操作?如何推遲下一個電話rxjs

例如:this.canContinue.wait(100).next(true);

我可以使用的setTimeout但如果RX內置了我的方式寧願用它代替。

編輯:雅對不起,它應該是一個主題,而不是一個可觀察。 延遲算子有點做我想要的,但我補充說,當我訂閱。

this.canContinue.delay(100).subscribe(s => //do something) 但是這會延遲每一次,我只是想延遲一下。

在我的使用案例中,我有一個按鈕,可以將您帶到表單中的另一組選項,但選擇一個選項會自動帶您到下一個選項,但我想要延遲,因爲它的震動會立即看到下一個選項。

+3

'Observables'沒有'next'方法,那就是'Observers'。我假設你想要「延遲」,但很難說不知道你想用這個來完成什麼。 – paulpdaniels

回答

0

@paulpdaniels指出,你的例子有點不對,所以我試圖推斷你想要的。有幾種方法可以延遲元素的排放。這隻會延遲true元素的排放。

Rx.Observable.of(true,false,true).mergeMap(value => { 
    return value === true 
    ? Rx.Observable.of(value).delay(100) 
    : Rx.Observable.of(value); 
}).subscribe(console.log); 

false 
true 
true 

這將延緩一切:

Rx.Observable.of(true,false,true).delay(100).subscribe(console.log) 
+0

我添加了一些上下文來嘗試和解釋我在做什麼更好@mkulke – Devcon

+0

@Devcon>但是這會延遲每一次,我只是想延遲。 – mkulke

+0

@Devcon:_sometimes_實際上意味着什麼?它依賴於發射值,在這種情況下,上面的解決方案應該工作:'mergeMap',然後根據值返回Observable或Observable w/an延遲。如果_sometimes_依賴於程序中的某個其他實體,那麼您可能應該將該實體包裝在Observable中,並使用'withLatestFrom(otherEntity $,...)',並使用它來過濾observable。 – mkulke