Обновление переводов в загрузчике ngx-translate - PullRequest
0 голосов
/ 30 ноября 2018

Я создаю пользовательский загрузчик Angular ngx-translate, который получает переводы из кэша или из API.Точка, в которой я застрял, это Случай 2 (см. Код ниже):

Желаемая процедура:

  1. получает переводы из кэша (синхронизация)
  2. возвращает кэшированные переводы (через наблюдателя)
  3. получает переводы от api (async)
  4. сравнивает кеш и api (находит разницу)
  5. отправляет обновленную версию переводов <- Как? </li>

Вот что я получил:

getTranslation(lang: string): Observable<any> {
    return new Observable(observer => {

      // get translations from cache + start getting translations from API
      const cachedTranslations = this.cacheService.getTranslation(lang);
      const apiTranslations = this.http.get(environment.translationApi + lang);


      if (cachedTranslations) {
        // CASE #1: return cached translations
        observer.next(cachedTranslations);
      }

      apiTranslations.subscribe(translations => {
        // CASE #2: if cached translations are not up to date
        // or dont exist, add new translations and reload lang
        if (JSON.stringify(translations) !== JSON.stringify(cachedTranslations)) {
          this.cacheService.setTranslations(lang, translations);
          observer.next(translations);
        }

        observer.complete();
      }, () => {
        observer.complete();
      });

    });
}

Использование observer.next() работает только один раз, даже если оно еще не завершено.Итак, как мне обновить переводы в случае 2, где observer.next() уже произошло в случае 1?

...