如何缓存一个可观察的并始终提供服务?

时间:2019-04-23 09:16:15

标签: angular rxjs

这是我的解析器

@Injectable()
export class FieldsResolver implements Resolve<string[]> {
    private result:Array<string> | null = null;

    constructor(private httpClient:HttpClient) {}

    resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot){
        return this.result || this.httpClient.get<Array<string>>('<api_route>')
            .pipe(
                tap(fields => {
                    this.result= fields;
                })
            );
    }
}

如您所见,解析器返回的数据与我的路线无关。因此,每次路由更改时,我都不需要实际向我的API发出请求。

我上面的代码有效:它仅在第一次时执行请求。在接下来的几次中,它将返回缓存的结果。

我只是想知道是否还有更多的rxjx方法可以做到这一点。

1 个答案:

答案 0 :(得分:0)

您需要返回(this.result)-您的alwasys函数需要返回一个可观察值。所以

resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot){
    if (this.result)
       return of(this.result)

    return this.httpClient.get<Array<string>>('<api_route>')
            .pipe(
                tap(fields => {
                    this.result= fields;
                })
      }