簡體   English   中英

合並兩個 observables 然后轉換結果

[英]Combine two observables then transform the result

我有一個使用 Angular Http 調用的 REST 端點。 我需要鏈接兩個調用,然后使用每個調用的結果創建一個要返回的對象。

偽代碼:

  • POST 新實體到服務器並取回 UID
  • PATCH 實體內容到服務器,使用返回的 UID
  • 創建一個結合實體內容和 UID 的對象
  • 將對象返回給調用者(訂閱)

我認為這會做到,但我收到一個錯誤;

addClient(clientData) {
   let clientUid;
   return this.http.post(`/clients`, clientData)
     .flatMap((newClient:any) => {
       clientUid = newClient.name;
       return this.http.patch(`/spec/${clientUid}`, clientData)
       .flatMap((updatedClient:any)=> {
         return {
           uid: clientUid,
           ...updatedClient,
        }
      })
   });
}
//consume
 this.clientService.addClient(clientData)
    .subscribe((response:any) =>{ }

類型錯誤:您提供了一個預期流的無效對象。 您可以提供 Observable、Promise、Array 或 Iterable。

我怎樣才能:

  • 修復錯誤並讓 addClient 返回我想要的對象?
  • 另外,有沒有一種方法可以在最終的 flatMap 中使用 UID 而不必設置局部變量(clientUid)?

.flatMap函數期望您返回一個Observable ,但您實際上返回的是一個對象。

如果要轉換值,則應使用.map

關於使用clientUuid ,看到您的map是從原始flatMap調用的,您應該能夠使用newClient.name

您的代碼中有一些錯誤+可以改進。

  1. 改進:您不需要嵌套flatmap調用。
  2. 錯誤:您不需要第二個flatmap 你需要的是map

我為您的問題創建了一個演示 - https://stackblitz.com/edit/so-rxjs

暫無
暫無

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

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