代码之家  ›  专栏  ›  技术社区  ›  niraja k

角度4缓存

  •  1
  • niraja k  · 技术社区  · 6 年前

    1. 我必须显示大量的数据

    2. https://blog.thoughtram.io/angular/2018/03/05/advanced-caching-with-rxjs.html

    3. 但我有两个问题使用这个。。。。

      4.1. 这会提供最新的数据,但我需要显示该特定页面的数据,并且在我再次返回时也会显示相同的数据

      4.2. 我在上面使用了一个搜索,它要求我使用整个数据,但由于这种缓存是分步骤获取数据的,所以当用户在从后端服务提取完整数据之前进行搜索时,我会遇到问题。。。

    请建议解决此问题的最佳方法。。。。

    1 回复  |  直到 6 年前
        1
  •  0
  •   JBoothUA    6 年前

     1) if you miss it you miss it = Subject   
     2) give me the last value =  BehaviorSubject   
     3) give me all the last values = ReplaySubject
    

    听起来你在找#3对吗? 如果是这样,只需查看ReplaySubjects即可。

    Subject-订阅服务器将仅获取订阅后发出的已发布值。A.

    BehaviorSubject-缓存最后一个值。订户将在首次订阅时获得最新的值。

    ReplaySubject—它最多可以缓存指定数量的排放。任何订阅服务器都将在订阅时获得所有缓存的值。

    import * as Rx from "rxjs";
    
    const subject = new Rx.ReplaySubject(2, 100);
    
    // subscriber 1
    subject.subscribe((data) => {
        console.log('Subscriber A:', data);
    });
    
    setInterval(() => subject.next(Math.random()), 200);
    
    // subscriber 2
    setTimeout(() => {
      subject.subscribe((data) => {
        console.log('Subscriber B:', data);
      });
    }, 1000)
    

    我们创建ReplaySubject并指定只存储 最后2个值,但不超过100毫秒,我们开始发射主体 主体正在释放的价值。我们开始订阅 订户B,但我们在1000毫秒后这样做。这意味着5个值 在我们开始订阅之前,已由主题发出。 值,但不再超过100ms。这意味着在1000毫秒之后, 当订户B开始订阅时,它将只收到1个值作为