在下面的代码中,我每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)
})