[英]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.