簡體   English   中英

如何等待Promise解決rxjs過濾器

[英]how to wait for promise resolve rxjs filter

在我的observable源中,我接收到一些事件,在這些事件中我想為某個異步操作進行過濾。

例如:

s$.pipe(
    map((x) => x + 1),
    filter((x) => alreadyExist(x)))
  .subscribe(...)

alreadyExist是異步操作時,
(檢查該值是否存在於持久性存儲中),它返回一個布爾值。

假設alreadyExist返回一個布爾值的promise,
我如何wait退貨?
請注意,我需要保持不變的價值。
進行async-await不起作用,並且在返回過濾器之前執行了訂閱。

如果alreadyExist返回一個boolean ,則可以使用mergeMap ,它將等待其結果,如果為true ,則將其映射到原始x值。 如果為false則僅由filter過濾掉。

s$.pipe(
    map((x) => x + 1),
    mergeMap(x => from(alreadyExist(x)).pipe(
      filter(Boolean),
      mapTo(x),
    )),
  )
  .subscribe(...)

您可以嘗試我的建議-使用switchMap管道

let isAlreadyExist = false; // "global" variable :)
s$.pipe(
    map((x) => x + 1),
    switchMap(async (x) => {
      isAlreadyExist = await alreadyExist(x); // make sure alreadyExist is a promise func
      return x; // "do" do nothing with your data
    }),
    filter((x) => isAlreadyExist)) // isAlreadyExist is value of alreadyExist func
  .subscribe(...)

或者您可以閱讀有關defer RxJS Observable

暫無
暫無

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

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