rxjs http请求未缓存

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了rxjs http请求未缓存相关的知识,希望对你有一定的参考价值。

我正在尝试理解rxjs publishReplayrefCountshare我想要实现的是缓存http请求,如此处所述What is the correct way to share the result of an Angular Http network call in RxJs 5?

这就是我想出来的

export class TestService {

  constructor(private http: HttpClient) {}
  getData(): Observable<any> {
    return this.http.get('https://httpbin.org/anything').map((data: any) => {
    console.log('getting data');

      return Math.floor(Math.random() * 20);
    }).publishReplay(1).refCount();
  } 
}

叫它

t.getData().subscribe((data: any) => console.log(data));
t.getData().subscribe((data: any) => console.log(data));

请求通常会两次。

只是为了解原因:

我是否正确如果我第二次订阅时observable(http请求)尚未完成,则会发生此行为?

如果我在第一个订阅中移动第二个qazxsw poi,则只有一个请求是模式。

t.getData()

答案

每次调用here is a stackblitz with the code方法时,它都会返回一个新的可观察对象 - 将冷可观察对象转换为热可观察对象并不重要。

更合适地使用getData()是为了保持Observable的相同实例。

例如:

.publishReplay

打电话给:

export class TestService {
  data: Observable<any>;
  constructor(private http: HttpClient) {
     this.data = this.getData();
  }
  getData(): Observable<any> {
    return this.http.get('https://httpbin.org/anything').map((data: any) =>{
    console.log('getting data');

      return Math.floor(Math.random() * 20);
    }).publishReplay(1).refCount();
  } 
}

以上是关于rxjs http请求未缓存的主要内容,如果未能解决你的问题,请参考以下文章

[RxJS] Implement RxJS `mergeMap` through inner Observables to Subscribe and Pass Values Through(代码片段

[RxJS] Implement RxJS `switchMap` by Canceling Inner Subscriptions as Values are Passed Through(代码片段

angular rxjs:处理多个 http 请求

Angular/RxJS 6:如何防止重复的 HTTP 请求?

rxjs经典场景之http请求

用户用RxJS完成键入后如何开始处理?