首页 > 解决方案 > 更新 API 请求的可观察值

问题描述

我正在使用 observable 从 API 发出值。现在在其订阅的组件中,我想更新某个事件的可观察值。

我无法理解如何去做。

下面是服务类中的代码

 cacheSettingsData$: Observable<any>;

     public getUserSettings() {
        if (!this.cacheSettingsData$) {
          this.cacheSettingsData$.next(this.requestUserSettings());
          this.userSettings = this.cacheSettingsData$;
        }
        return this.cacheSettingsData$;
      }

requestUserSettings 执行 API 调用并返回值

requestUserSettings(): Observable<any> {

    let httpHeader = {
      headers: new HttpHeaders({
        'Content-Type': 'application/x-www-form-urlencoded'
      })
    };
    return this.http.get(userSettUrl, httpHeader).pipe(
      map((response) => Object(response['settings'])),
      catchError(error => this.handleError(error)), shareReplay()
    );

现在在订阅 了getUserSettings的组件中,我如何在某些事件(例如单击按钮时)上更新可观察的cacheSettingsData$的值?

请指导!

谢谢施鲁蒂奈尔

标签: angularrxjsobservable

解决方案


如果我正确理解了这一点,您希望存储this.userSettingsrequestUserSettings(). 当您requestUserSettings()返回一个流并且您希望将这些值输入cacheSettingsData$到然后将这些值设置为this.useSettings. 我认为您甚至不需要 this.cacheSettingsData$ 因为看起来您只想加载一次用户设置并将其缓存在this.userSettings. 所以我会建议这样的事情

// in this case this method name is not the best
public getUserSettings() {
    if (!this.userSettings) {
        this.requestUserSettings().subscribe(settings => {
            this.userSettings = settings
        })
    }
}

当然,我不知道您的项目背景,所以由您来考虑什么更适合您的要求。


推荐阅读