【问题标题】:How to use Observable inside http request Url?如何在 http 请求 URL 中使用 Observable?
【发布时间】:2020-11-15 14:24:35
【问题描述】:

我在 HTTP 获取请求中使用 Observable 值时遇到问题。

  1. 首先,我有一个服务可以获取用户设置,如果用户通过身份验证以及应用不同的设置,该设置就会触发。
        private userSettings: BehaviorSubject<UserSettingDto> = new BehaviorSubject<UserSettingDto(null);
        userSettings$ = this.userSettings.asObservable();
    
            loadUserSettings() {
            return this.http.get<any>(``).toPromise().then(
            data => {
              this.userSettings.next(data);
            });
          }
  1. 第二个服务将根据用户设置获取数据。

  fetchData(): Observable<ObjectType[]>{
    
        return this.UserSettingService.userSettings$.subscribe(
          settings => {
          return this.http.get<ObjectType[]>('Url' + settings); // This value must be returned of ObjectType[]
        }));
      }

我想对 HTTP 请求 URL 使用 userSetting$ 并返回该请求的主要问题,因为我从一个查看获取数据的组件订阅,我尝试了几种方法,并且还没有达到SwitchMap等想要的结果。

任何帮助将不胜感激,在此先感谢。

【问题讨论】:

    标签: angular observable httprequest


    【解决方案1】:

    听起来这就是你想要的:

    fetchData(): Observable<ObjectType[]> {
      return this.UserSettingService.userSettings$.pipe(
        switchMap(userSettingDto =>
          this.http.get<ObjectType[]>('Url' + settings))
      );
    };
    

    解释:UserSettingsService 暴露了一个 Observable userSettings$,一旦在UserSettingsService::loadUserSettings 中执行的请求成功完成,它将发出一个UserSettingDto 类型的值。现在调用fetchData 将返回一个Observable,它在以下情况下发出:

    1. UserSettingsService.userSettings$ 发出了一个非错误值
    2. this.http.get&lt;ObjectType[]&gt;('Url' + settings) 发出了一个非错误值

    基本上,“只有在用户设置可用时才执行 http 调用”。如果你想实际执行http请求,别忘了订阅fetchData返回的Observable。

    【讨论】:

    • 谢谢,但是 userSettingDto 为空,因为它的值在刷新或登录或更改设置时初始化,并且 fetchData 也在主页上触发,所以当 fetchData 被触发时 userSettingDto 为空。有什么建议吗?
    【解决方案2】:
    fetchData() {
      return this.http.get('').pipe(
        switchMap(data => {
          return this.http.get(URL + data);
        })
      );
    }
    
    const objectTypes = await Service.fetchData().toPromise();
    

    【讨论】:

      猜你喜欢
      • 2020-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-14
      • 2016-12-07
      • 1970-01-01
      • 2017-06-19
      • 2020-11-13
      相关资源
      最近更新 更多