如何从订阅中返回 observable?

4

For example, I have code like this:

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

你试图通过这段代码解决什么问题? - wessam yaacob
3个回答

2
如果你这样做,返回类型就是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`)
      }),
    );
  }

请参考"展开嵌套的Observables"获取更多信息。


1
你不能这样做,但你可以很容易地避免使用“subscribe”,而改用“map”或“do”。
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

你能用HttpClient来做这个吗? - The Head Rush
@Jota.Toledo 你为什么这样认为? - Günter Zöchbauer
2
你的代码片段的返回类型目前是 Obsevable<Observable<User>> - Jota.Toledo
Observable<Observable<User>> 的解决方案在这里:https://dev59.com/AKjka4cB1Zd3GeqPGve_#56982273。 - qaisjp

0

下面是一段代码示例

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

请查看这里以获取更多详情。

并使用switchMap来管理嵌套的Observables。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接