如何从subscribe返回observable?

时间:2018-02-11 12:32:55

标签: javascript angular typescript observable

例如,我有这样的代码:

// angular service post method
postUser(): Observable<User> {
   this.tokenService.getToken().subscribe(token => {
       // need to return this observable
       return this.http.post<User>(url, {token});
   })
}

3 个答案:

答案 0 :(得分:2)

您不能,但您可以轻松避开subscribe,而是使用mapdo

postUser(): Observable<User> {
   return this.tokenService.getToken().map(token => {
       // need to return this observable
       return this.http.post<User>(url, {token});
   })
}

您可能希望查看mergeMap以及其他可用的运算符以及您的用例。 另请参阅https://www.learnrxjs.io/operators/transformation/mergemap.html

答案 1 :(得分:0)

这是一个代码示例

  save(person: Person) : Observable<Response>{
    return this
      .http
      .put(`${this.baseUrl}/people/${person.id}`,
            JSON.stringify(person),
            {headers: this.getHeaders()});
  }

有关详细信息,请参阅here

使用switchMap来管理嵌套的Observable。

您的帖子应该更新数据库。为什么没有用户参与您的方法?

答案 2 :(得分:0)

如果执行此操作,则返回类型为Observable<Observable<User>>,效果不佳:

  getUser(): Observable<Observable<User>> {
    return this.accessToken$.pipe(
      map(_ => {
        return this.http.get<User>(`${environment.apiURL}/user`)
      }),
    );
  }

使用mergeMap

 getUser(): Observable<User> {
    return this.accessToken$.pipe(
      mergeMap(_ => {
        return this.http.get<User>(`${environment.apiURL}/user`)
      }),
    );
  }

有关更多信息,请参阅“ Flattening nested Observables”。