0

什麼是最優雅的方式(在Calmm stack, Kefir, Karet Utils etc.)做間隔重複(無限)的異步作業?Calmm-async請求的間隔時間?

我想get一些json每2000ms

實施例1(2000毫秒間隔):

  1. 抓取JSON(get花費100毫秒)
  2. 手柄JSON
  3. 等待留在間隔的剩餘時間,並且從步驟1
再次啓動

實施例2(2000ms間隔)

  1. 取JSON(get需要5000毫秒)
  2. 手柄JSON
  3. 等待,直到步驟1和2再次在步驟在短1

所以開始之前完成,我要反覆get S(或任何異步工作),並在請求之間至少等待2000ms

我不希望下一個請求觸發,直到前一個請求以某種方式完成(成功,失敗,超時)。

+0

只是好奇,什麼是「Calmm」?還是開菲爾,還是Karet Utils? – evolutionxbox

+0

這是關於'Angular'和'RXJS',但主要概念是完全相同的,所以,我認爲這已經在這裏回答了:https://stackoverflow.com/questions/44540703/return-promise-every-1-分鐘/ 44540833#44540833 – Hitmands

+0

@evolutionxbox你可以在這裏查看calmm https://github.com/calmm-js/documentation/blob/master/introduction-to-calmm.md –

回答

0

這就是我將如何與克菲爾而不訴諸於Kefir.stream。請注意,以下job將是您在每次打勾時執行的任務。我爲代碼工作留下了一個虛擬任務。

let result = Kefir.repeat(() => { 
    let job = Kefir.later(Math.random() * 5000); 
    let wait = Kefir.later(2000).ignoreValues(); 
    return Kefir.merge([job, wait]); 
}); 

下面是使用樣式從酸牛奶文檔事件的可視化:

spawned 1 - job: ------1X 
spawned 1 - wait: -----------X 
spawned 1 - merge: ------1----X 
spawned 2 - job:    ------------------2X 
spawned 2 - wait:    -----------X 
spawned 2 - merge:    ------------------2X 
spawned 3 - job:         ---3X 
spawned 3 - wait:         -----------X 
spawned 3 - merge:         ---3-------X 
result:   ------1-----------------------2----3--------...