Я создаю пользовательский загрузчик Angular ngx-translate, который получает переводы из кэша или из API.Точка, в которой я застрял, это Случай 2 (см. Код ниже):
Желаемая процедура:
- получает переводы из кэша (синхронизация)
- возвращает кэшированные переводы (через наблюдателя)
- получает переводы от api (async)
- сравнивает кеш и api (находит разницу)
- отправляет обновленную версию переводов <- Как? </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?