簡體   English   中英

如何從subscribe返回observable?

[英]How to return observable from subscribe?

例如,我有這樣的代碼:

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

你不能,但你可以輕松避免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

這是一個代碼示例

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

有關詳細信息,請參見此處

並使用switchMap管理嵌套的Observable。

您的帖子應該更新數據庫。 為什么沒有用戶參與您的方法?

如果你這樣做,返回類型是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`)
      }),
    );
  }

有關更多信息,請參閱“展平嵌套Observable ”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM