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--------...