簡體   English   中英

RXJS如何使用OR條件

[英]RXJS how to use OR condition

我有兩個 Observable

例如,我正在等待 HTTP POST 電話回來或 WebSocket 電話回來所以我可以繼續。 無論是打電話回來,我都需要驗證信息,直到滿足特定條件。 以任何一個回來的例子為例,我可以繼續。 但是如果我使用過濾器,它會停止並等待不會繼續。

switchMap(() =>
    webSocket.access.pipe(
        filter((data) => data.access.role === "ADMIN"),
        filter((data) => data.access.status === "ACTIVE")
    )
),
switchMap(() =>
    httpService.access.pipe(filter((res) => res.access === true))
);

使用race運營商:

race(
  switchMap(() =>
    webSocket.access.pipe(
        filter((data) => data.access.role === "ADMIN"),
        filter((data) => data.access.status === "ACTIVE")
    )
  ),
  switchMap(() =>
    httpService.access.pipe(filter((res) => res.access === true))
  )
).pipe(/* do subsequent operations here */);

https://www.learnrxjs.io/learn-rxjs/operators/combination/race

我想

obsPost$:Observable<any>=...
socket$:Observable<any>=
  1. 我們使用 merge 來獲取任何可觀察值。 但是用屬性“id”和“數據”轉換 object 中的每個可觀察對象
  2. 然后過濾(根據“id”的值得到“access”值)
  3. 最后只返回“數據”
   myObs$=merge(obsPost$.pipe(map((res:any)=>({id:'post',data:res}))
                 socket$.pipe(map((res:any)=>({id:'socket',data:res}))).pipe(
                   filter((res:any)=>{
                      const access:any=res.id=="post"? data.data.access.role:
                                                       data.access
                      return access==true || access=='ADMIN' || access=='ACTIVE')
                   }),
                   map(res=>res.data))

暫無
暫無

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

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