Angular-使用2种不同的http get方法获取嵌套结果,最后一个使用第一个数据

时间:2019-03-27 19:09:20

标签: angular http rxjs angular-resolver

在一个解析器内部,我需要获取用户数据。首先,如果需要,我需要检查其配置文件是否为“ Sales”,使用返回的用户名,我必须从其他http get方法获取salesPerson数据,否则,返回一些可以检查是否为空的数据。

我有2种不同的方法:

userInfo(): Observable<User> {
        return this.httpClient.get('/endpoint/api/auth/me')
            .pipe(
                map(result => result['user'])
            )
    } // in this observable there is the username and profile inside.

getSalesPerson(username) {
    return this.httpClient.get<ISalesRep>(`${this.BASE_URL}/getVendedor?user=${usuario}`);
  } // is this observer there is salesPerson data with SalesPersonId

两者的观察者不同。第一个问题: 在解析器的解析方法上,应使用哪种类型?第一个使用IUSer接口,第二个使用ISalesRep接口。

resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): 
  Observable<????> | Promise<????> | ??? { ...  }

第二个问题: 如何获得退货?

return this.loginService.userInfo()
    .pipe (
      ???someMethod???((user) => { 
        if ( user.profile == 'Sales' ) {
            return this.otherService.getSalesPerson(user.username)
            .subscribe((data) => { take the SalesPerson Observable }
        } else  {
            return empty observable or some I can check if is empty;
        }
        })
      )
    .subscribe();

我认为有人可以提供帮助。 预先感谢

1 个答案:

答案 0 :(得分:0)

我认为这方面应该有所帮助

this.loginService.userInfo()
    .pipe (
      concatMap((user) => { 
        // User is the result of the userInfo method
        if ( user.profile == 'Sales' ) {
          return this.otherService.getSalesPerson(user.username)
        } else  {
          return of(null)
        }
      }),
      concatMap((salesPerson) => {
        if (!salesPerson) { /* do something else */ }
        // the result of this.otherSerivce.getSalesPerson()
      }),
    )
.subscribe();