在我的observable源中,我接收到一些事件,这些事件要针对某些异步操作进行过滤。

例如:

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


如果alreadyExist是异步操作,
(检查该值是否存在于持久性存储中),它返回一个布尔值。

假设alreadyExist返回一个承诺,该承诺会解析为布尔值,
如何在退货时wait
请注意,我需要保持不变的价值。
在过滤器返回之前,async-await无效,并且已执行订阅。

最佳答案

您可以尝试我的建议-使用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(...)


或者您可以阅读有关deferRxJS Observable的信息。

关于javascript - 如何等待Promise解决rxjs过滤器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51328365/

10-12 07:32