gpt4 book ai didi

javascript - 以间隔执行异步请求的冷静方式?

转载 作者:行者123 更新时间:2023-11-29 23:44:14 24 4
gpt4 key购买 nike

以间隔执行重复(无限)异步作业的最优雅方式(在 Calmm stack, Kefir, Karet Utils etc. 中)是什么?

我想每2000ms获取一些json。

示例 1(2000 毫秒间隔):

  1. 获取json(get需要100ms)
  2. 处理json
  3. 等待间隔剩余时间,从第一步重新开始

例子2(2000ms间隔)

  1. 获取 json(get 耗时 5000ms)
  2. 处理json
  3. 等到第 1 步和第 2 步完成后再从第 1 步开始

简而言之,我想重复 get(或任何异步工作)并在请求之间至少等待 2000ms

我不希望在前一个请求以某种方式(成功、失败、超时)完成之前触发下一个请求。

最佳答案

这就是我在不借助 Kefir.stream 的情况下使用 Kefir 的方法。请注意,下面的 job 将是您在每个 tick 执行的任务。我 stub 了一个虚拟任务以使代码工作。

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

下面是使用 Kefir 文档中的样式的事件可视化:

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

关于javascript - 以间隔执行异步请求的冷静方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44564988/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com