首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用RxJS进行不超过每N秒的重复HTTP请求

如何使用RxJS进行不超过每N秒的重复HTTP请求
EN

Stack Overflow用户
提问于 2018-09-12 15:05:21
回答 1查看 522关注 0票数 0

我想一次又一次地向API端点发出HTTP请求(永远),在每一步上使用以前的值(提供活动的“增量”)。该API端点被限制,因此我每分钟不能发出超过5个请求。

因此,如果前一个请求耗时超过1/5分钟,那么我们将立即触发下一个请求。否则,我们将等待1/5分钟。

作为在每一步中使用之前的值的一种方式,我考虑了expand,但是如何将其与interval/timer结合起来以避免请求太频繁呢?

EN

回答 1

Stack Overflow用户

发布于 2018-09-14 03:43:39

您可以考虑创建一个调用如下函数的可观察对象

代码语言:javascript
运行
复制
const callStream = (apiThrottleTime: number) => {
    let inputFromPreviousCall;
    return interval(apiThrottleTime).pipe(
        mergeMap(i => {
            console.log('Call counter: ' + i, 'Input from previous call: ' + inputFromPreviousCall);
            return callSimulation(inputFromPreviousCall)
        }, 1),
        tap(result => inputFromPreviousCall = result),
    );
}

然后订阅它,将API的调节时间作为输入变量传递,例如

代码语言:javascript
运行
复制
const apiThrottleTime = 1000;
callStream(apiThrottleTime).subscribe();

API调用是用以下代码模拟的

代码语言:javascript
运行
复制
let callCounter = 0;
const callSimulation = (inputFromPreviousCall: number) => {
    const call = new Subject<any>();
    setTimeout(() => {
        call.next(callCounter);
        callCounter++;
        call.complete();
    }, Math.random()*4000);
    return call.asObservable();
};

想法如下所示

  1. interval创建你想要的通知的节奏,这是你的API
  2. 的节流时间,每当这个节奏时钟滴答作响,然后你调用API,它返回一个可观察的
  3. 你创建一个新的流,合并这样的新的可观察对象,将并发级别保持在1-并发级别是通过第二个可选参数设置的事实,你将并发级别设置为1确保所产生的可观察对象的通知序列与节奏时钟的通知序列保持相同,注意,并发级别设置为1的mergeMapconcatMap
  4. The相同。调用的结果存储在变量inputFromPreviousCall中,位于函数callStream的本地,并在后续调用

时使用

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52289312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档