我正在创建一个自定义 Angular ngx-translate 加载器,它可以从缓存或 API 获取翻译。我被卡住的地方是案例 2(见下面的代码):
所需程序:
- 从缓存中获取翻译(同步)
- 返回缓存的翻译(通过观察者)
- 从 api 获取翻译(异步)
- 比较缓存和 api(发现差异)
- 发送更新版本的翻译 <-- 如何?
这就是我得到的:
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()即使尚未完成,也只能使用一次。observer.next()那么,在案例1 中已经发生的情况下,如何更新案例 2 中的翻译?