[英]Implement delayed queue with RxJs Observable
想象一下,我們有一個布爾值隊列(我們不需要復雜的數據結構,因為我們只想存儲訂單的事實)。 項目可以隨時隨地進入隊列。 Observable將從此隊列中彈出項目,並以延遲的方式發出它們,但不需要延遲第一次發出。 隊列變空后,它將保持等待狀態,直到有新項目進入隊列並立即發出。 請幫助我實現此行為。
給定用戶可以按下使計數器遞增的按鈕。 開始時,計數器為0,用戶在500毫秒內單擊兩次。 第一次單擊會將計數器增加到一個,但第二次單擊將采取延遲500 ms的操作。 然后,用戶等待超過500毫秒並單擊。 可以說,第三次單擊必須立即增加計數器,因為沒有其他正在進行的增加操作。 如果第三次單擊發生在500 ms窗口中,則它必須等到其他操作完成。
是的,我想我會遇到問題@estus。 不知何故,有必要記錄正在進行中的最后一個動作在哪里。 節省發射時間或其他時間。
假設第一次點擊發生在300毫秒之前,並且發生了一次新點擊。 在這種情況下,第二次點擊僅需等待200毫秒。
更新1: 這是基於Dorus的答案的代碼
您可以使用concatMap
:
delay = 1000; // delay in ms
queue.concatMap(e =>
Rx.Observable.of(e) // emit first item right away
.concat(Rx.Observable.empty().delay(delay)) // delay next item
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.