在下面的代码中,我每500毫秒获得一个值,然后我取10个值。

现在我想过滤掉无效的值,但是我想调用的函数是异步的(但是发生得很快),我不知道如何在过滤操作符中做到这一点。

this.subscription = this.input.getStream()
    .throttleTime(500)
    .filter(value => {
      // I want to filter out invalid values
      // but the function I want to call here is async
    })
    .take(10)  // and get 10 valid ones
    .subscribe(value => {
      this.values.push(value)
    })


注意:我希望过滤器在时间节流之后发生。

最佳答案

一种方法是:


使用flatMap调用异步函数,同时返回要用于过滤的值和结果;
基于后者的过滤器;然后
稍后再重新包装该值。


就您而言,可能类似于:

this.subscription = this.input.getStream()
    .throttleTime(500)
    .flatMap(value => asyncFunction(value).map(include => ({ value, include }))
    .filter(({ include }) => include)
    .take(10)
    .subscribe(({ value }) => {
      this.values.push(value)
    })

10-05 21:04
查看更多