Как кэшировать одну наблюдаемую и всегда обслуживать ее? - PullRequest
0 голосов
/ 23 апреля 2019

Вот мой распознаватель

@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 голосов
/ 23 апреля 2019

вам нужно вернуть (this.result) - ваша функция всегда должна возвращать наблюдаемую.Итак

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;
                })
      }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...