簡體   English   中英

使用RxJs Observable實現延遲隊列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM