为 Angular 2+ 创建一个装饰器,返回服务 http 调用的最后结果

Posted

技术标签:

【中文标题】为 Angular 2+ 创建一个装饰器,返回服务 http 调用的最后结果【英文标题】:Creating a Decorator for angular 2+ that returns the last result of a service http call 【发布时间】:2019-09-02 01:40:49 【问题描述】:

我有一个组件调用这样的服务

  this.service.GetCountries()
  .subscribe((pCountries: ICountry[]) => 
    this.mCountries = pCountries;
  );`

我的服务看起来像这样

private countriesCache$ = new ReplaySubject(1);

GetCountries(pForceRefresh?: boolean) 

   if (!this.countriesCache$.observers.length || pForceRefresh) 
     this.http.get<ICountry[]>(path + 'GetCountries')
       .subscribe(
         countries => 
           this.countriesCache$.next(countries)
         ,
         error => 
           this.countriesCache$.error(error);
           // Recreate the Observable as after Error we cannot emit data anymore
           this.countriesCache$ = new ReplaySubject(1);
         
       );
   

   return this.countriesCache$;

如您所见,我正在缓存结果并将缓存的数据返回给每个后续请求。

有没有办法可以将此缓存逻辑移动到装饰器中?除了package

,我似乎在网上找不到任何这样的例子

【问题讨论】:

【参考方案1】:

有一个 npm 包我从未尝试过,但我听说过。

查看github:https://github.com/angelnikolov/ngx-cacheable

安装它:npm install ngx-cacheable

【讨论】:

以上是关于为 Angular 2+ 创建一个装饰器,返回服务 http 调用的最后结果的主要内容,如果未能解决你的问题,请参考以下文章

Angular - 创建通用装饰器包装 @HostListener

角 |将服务注入装饰器

Angular `@Host` 装饰器没有到达顶部?

通过 Angular 2 中的 Input 装饰器使用多个属性

使用类装饰器时需要 Angular2 反射元数据填充程序

在 Angular 6 中生成服务时,提供 Injectable 装饰器的目的是啥?