我正在尝试使用 RxJS 进行简单的简短投票。delay
它需要每秒向服务器上的位置发出一次请求path
,一旦达到以下两个条件之一就结束:回调isComplete(data)
返回 true 或者它已经尝试了服务器超过maxTries
. 这是基本代码:
newShortPoll(path, maxTries, delay, isComplete) {
return Observable.interval(delay)
.take(maxTries)
.flatMap((tryNumber) => http.get(path))
.doWhile((data) => !isComplete(data));
}
但是,在 RxJS 5.0 中不存在 doWhile,因此只能尝试服务器的条件maxTries
有效,这要归功于 take() 调用,但isComplete
条件不适用。我怎样才能做到这一点,所以 observable 将 next() 值,直到 isComplete 返回 true,此时它将 next() 该值和 complete()。
我应该注意到这takeWhile()
对我不起作用。它不返回最后一个值,这实际上是最重要的,因为那是我们知道它完成的时候。
谢谢!