Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在完成后n秒钟重复请求(Angular2 - http.get)

在完成后n秒钟重复请求(Angular2 - http.get)
EN

Stack Overflow用户
提问于 2016-06-21 00:02:11
回答 4查看 10.1K关注 0票数 13

我和angular2一起玩了一会儿就被困住了。

对于单个请求,使用http.get可以正常工作,但我希望每4秒轮询一次实时数据,在修改了很长一段时间并阅读了大量的reactivex内容之后:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Observable.timer(0,4000)
  .flatMap(
    () => this._http.get(this._url)
       .share()
       .map(this.extractData)
       .catch(this.handleError)
  )
  .share(); 

http.get-observable发出请求结果之后,是否有一种简单的方法来启动(4秒)间隔?(或者我最后会被发现-地狱?)

我想要的时间线:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Time(s): 0 - - - - - 1 - - - - - 2 - - - - - 3 - - - - - 4 - - - - - 5 - - - - - 6
Action:  Request - - Response - - - - - - - - - - - - - - - - - - - -Request-... 
Wait:                | wait for 4 seconds -------------------------> |
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-06-23 23:53:06

更新为RxJS 6

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { timer } from 'rxjs';
import { concatMap, map, expand, catchError } from 'rxjs/operators';

pollData$ = this._http.get(this._url)
  .pipe(
    map(this.extractData),
    catchError(this.handleError)
  );

pollData$.pipe(
  expand(_ => timer(4000).pipe(concatMap(_ => pollData$)))
).subscribe();

我使用的是RxJS 5,我不确定RxJS 4等效操作符是什么。无论如何,这里是我的RxJS 5解决方案,希望它能有所帮助:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var pollData = this._http.get(this._url)
            .map(this.extractData)
            .catch(this.handleError);
pollData.expand(
  () => Observable.timer(4000).concatMap(() => pollData)
).subscribe();

展开操作符将发出数据,并递归地启动一个新的可观察到的每一个发射。

票数 13
EN

Stack Overflow用户

发布于 2016-06-23 22:06:32

我自己设法做到了,唯一的缺点是http.get不能更容易地重复。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pollData(): Observable<any> {

  //Creating a subject
  var pollSubject = new Subject<any>();

  //Define the Function which subscribes our pollSubject to a new http.get observable (see _pollLiveData() below)
  var subscribeToNewRequestObservable = () => {
    this._pollLiveData()
      .subscribe(
      (res) => { pollSubject.next(res) }
      );
  };

  //Subscribe our "subscription-function" to custom subject (observable) with 4000ms of delay added
  pollSubject.delay(4000).subscribe(subscribeToNewRequestObservable);

  //Call the "subscription-function" to execute the first request
  subscribeToNewRequestObservable();

  //Return observable of our subject
  return pollSubject.asObservable();

}

private _pollLiveData() {

  var url = 'http://localhost:4711/poll/';

  return this._http.get(url)
    .map(
    (res) => { return res.json(); }
    );
};

以下是您不能使用更直接的订阅的原因:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var subscribeToNewRequestObservable = () => {
    this._pollLiveData()
      .subscribe(pollSubject);
  };

完成后,http.get**-observable也将完成您的主题并防止它发出更多的项目。**

这仍然是一个冷冰冰的观察,因此,除非你订阅它,不会提出任何要求。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
this._pollService.pollData().subscribe(
  (res) => { this.count = res.count; }
);
票数 2
EN

Stack Overflow用户

发布于 2017-08-29 03:11:52

如果您希望轮询延迟取决于以前的请求完成状态,则可以从Can Nguyen对回答稍加修改。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var pollData = () => request()   // make request
    .do(handler, errorHandler)   // handle response data or error
    .ignoreElements()            // ignore request progress notifications
    .materialize();              // wrap error/complete notif-ns into Notification

pollData()                            // get our Observable<Notification>...
  .expand(                            // ...and recursively map...
    (n) => Rx.Observable              // ...each Notification object...
      .timer(n.error ? 1000 : 5000)   // ...(with delay depending on previous completion status)...
      .concatMap(() => pollData()))   // ...to new Observable<Notification>
  .subscribe();

扑通

或者另一种选择:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var pollData = () => request()             // make request
    .last()                                // take last progress value
    .catch(() => Rx.Observable.of(null));  // replace error with null-value

pollData()
  .expand(
    (data) => Rx.Observable
      .timer(data ? 5000 : 1000)           // delay depends on a value
      .concatMap(() => pollData()))
  .subscribe((d) => {console.log(d);});    // can subscribe to the value stream at the end

扑通

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

https://stackoverflow.com/questions/37938735

复制
相关文章
Axios 取消重复请求
项目地址:https://github.com/Ewall1106/mall 有什么用? 当用户频繁点击在短时间内发送多个 ajax 请求,但是由于网络原因服务器数据无法及时响应返回,这时候,就会有可能造成前端页面数据不匹配的情况。 具体场景来说,在用户网速不好的情况下的比如搜索框 onchange 事件的模糊搜索、触底刷新请求列表数据、tab 栏的高频切换等等。 再者,这样也浪费服务器资源,也是性能优化的一种必要手段。 基本使用 官网地址:Axios-CancelToken 官网的基本示例如下。 c
Ewall
2020/11/12
1.5K0
如何优雅处理重复请求/并发请求?
一些用户请求在某些情况下是可能重复发送的,如果是查询类操作并无大碍,但其中有些涉及写入操作,一旦重复了,可能会导致很严重的后果。例如交易接口如果重复请求,可能会重复下单。
java进阶架构师
2021/07/08
4.8K1
如何优雅处理重复请求/并发请求?
优雅地处理重复请求(并发请求)
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
芋道源码
2022/03/24
9970
如何优雅地处理重复请求(并发请求)
对于一些用户请求,在某些情况下是可能重复发送的,如果是查询类操作并无大碍,但其中有些是涉及写入操作的,一旦重复了,可能会导致很严重的后果,例如交易的接口如果重复请求可能会重复下单。 重复的场景有可能是: 黑客拦截了请求,重放 前端/客户端因为某些原因请求重复发送了,或者用户在很短的时间内重复点击了 网关重发 …. 本文讨论的是如何在服务端优雅地统一处理这种情况,如何禁止用户重复点击等客户端操作不在本文的讨论范畴。 利用唯一请求编号去重 可能会想到的是,只要请求有唯一的请求编号,那么就能借用Redis做这个去
程序猿DD
2022/04/11
5760
如何优雅地处理重复请求(并发请求)
对于一些用户请求,在某些情况下是可能重复发送的,如果是查询类操作并无大碍,但其中有些是涉及写入操作的,一旦重复了,可能会导致很严重的后果,例如交易的接口如果重复请求可能会重复下单。
用户1263954
2022/05/23
1.1K0
如何优雅地处理重复请求(并发请求)
如何优雅地处理重复请求(并发请求)
你可能会想到的是,只要请求有唯一的请求编号,那么就能借用Redis做这个去重——只要这个唯一请求编号在redis存在,证明处理过,那么就认为是重复的
用户2781897
2020/12/15
1.4K0
LeetCode - 重复 N 次的元素
原题地址:https://leetcode-cn.com/problems/n-repeated-element-in-size-2n-array/
晓痴
2019/08/06
7650
LeetCode - 重复 N 次的元素
webapi避免http重复请求
route过滤 添加路由过滤,在过滤器中判断sessionid或者cookie session session服务端文件,存储guid或者用户账户(操作简单,增加服务器压力) session管理参考:https://www.cnblogs.com/wxdlut/p/9237577.html cookie cookie浏览器端,浏览器请求附带cookie,cookie设置超时管理连接状态) 路由过滤实现方式 golang gin.Default().Use(func() gin.HandlerFunc{
sofu456
2021/12/06
8970
封装 axios 取消重复请求
在我们web开发过程中,很多地方需要我们取消重复的请求。但是哪种场合需要我们取消呢?我们如何取消呢?带着这些问题我们阅读本文。
coder_koala
2021/01/06
1.7K0
ExcelVBA生成不重复n位的n个数字
'使用方法:call rnd_n_n(位数,个数,存放位置)如:Call rnd_n_n(10, 100, "a1")
哆哆Excel
2022/10/25
4460
ExcelVBA随机生成不重复的N个N位数文本
效果看图 【代码】 自定义函数1 '随机生成不重复指定位数文本,用法:brr=RndDigitText(位数, 个数) '.range("A1").Resize(UBound(brr), 1) = brr Function RndDigitText(di As Integer, number As Integer) Dim d As Object 'New Dictionary
哆哆Excel
2022/10/31
5080
961. 重复 N 次的元素
在大小为 2N 的数组 A 中有 N+1 个不同的元素,其中有一个元素重复了 N 次。 返回重复了 N 次的那个元素。
Michel_Rolle
2021/02/25
2.5K0
java防止接口重复请求_前端防止重复提交
对于一些新增数据的接口通常需要进行接口的防重复提交保护,如:用户账号注册、用户下单、用户发帖等等类似的应用场景。 防重复提交主要应用场景是避免用户短时间内由于误操作导致同一份数据被保存多次所带来的问题,如果被保存的数据内容存在唯一标识限制则可以选择不使用防重复提交,在业务侧保证数据的唯一性即可。 注意:防重复提交只能防止短时间内用户的误操作导致插入重复数据的问题,如果需要数据的唯一性还是需要在业务中自行处理。
全栈程序员站长
2022/09/27
2K0
AJAX请求重复发送问题
在进行 AJAX(Asynchronous JavaScript and XML)请求时,我们有时会遇到请求重复发送的问题。这可能会导致不必要的请求重复执行,增加服务器负载和网络带宽消耗,并且可能对应用程序的性能和用户体验产生不良影响。
堕落飞鸟
2023/05/18
1.2K0
Axios使用CancelToken取消重复请求
处理重复请求:没有响应完成的请求,再去请求一个相同的请求,会把之前的请求取消掉
明知山
2023/08/18
4020
Axios使用CancelToken取消重复请求
SpringBoot如何处理重复请求?
日常业务开发中,处理重复请求应该是我们需要经常注意的,那么在Spring Boot中,防止重复请求的方法可以通过以下几种方式实现:
跟着可乐学技术
2023/04/27
9470
get 和 post 重复请求详解
适用于频繁触发并且需要给予用户一些反馈的场景,如:resize、scroll、mousemove
ruochen
2021/12/16
3.5K0
使用Vagrant在几秒钟内调试内核
所有Windows内核黑客(从初学者到专业人士)都知道,设置和管理用于内核调试的虚拟机可能很耗时。Vagrant是一个免费的开源工具,可以自动创建和自动化VM。这篇文章将向您介绍Vagrant,以及如何利用其功能自动执行我们的内核调试设置。
franket
2021/01/05
2.9K0
使用原生 JavaScript 在页面加载完成后处理多个函数
网页中的 JavaScript 脚本运行是需要通过事件去触发的。一般的做法就是在网页中,直接编写几个函数,有的在代码被加载的时候就被浏览器处理,或者使用类似下面的代码来触发实现函数的相关功能。
Denis
2023/04/15
2.8K0
iOS多个网络请求完成后执行下一步
在开发中,我们很容易遇到这样的需求,需要我们同时做多个网络请求,所有网络请求都完成后才能进行下一步的操作。如下载多个图片,下载完了才能展示。 今天我们就来研究一下这个问题的解决方案。 1.首先,我们创建一个项目,然后做一般性的做法,不做任何处理去连续请求一个接口10次: 先在viewDidLoad中创建第一种情况. //1.无处理 UIButton *Btn1 = [UIButton buttonWithType:UIButtonTypeCustom]; Btn1.frame = CGRec
清墨
2018/05/07
3K0

相似问题

重复bash命令n秒钟

22

RXJava + Retrofit.每n秒钟重复请求一次

16

重复函数执行n秒钟

44

如何每N秒钟重复运行bash脚本?

28

angular2调用http.get请求打开文件

40
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文