从@ctietze答案似乎是正确的一个很费力的方式。但经过测试,我意识到throttle
杀死了整个概念。 基本上throttle
将在可观察的开始之后返回值。这意味着它不会等到0.4s
发出第一个值。
func testWithThrottle() -> Observable<Int> {
return
Observable.just(7) // 1
.concat(Observable.never()) // 2
.throttle(3.0, scheduler: Schedulers.background) // 3
.take(1) // 4
// 1. -7--|->
// 2. -7------------------------------->
// 3. -7------------------------------->
// 4. -7--|->
}
...
print("[\(Date())] Start!")
testWithThrottle().subscribe({ (event) in
print("[\(Date())] event: \(event)")
}).addDisposableTo(disposeBag)
print("[\(Date())] End!")
...
[2017-06-03 03:14:00 +0000] Start!
[2017-06-03 03:14:00 +0000] event: next(7)
[2017-06-03 03:14:00 +0000] event: completed
[2017-06-03 03:14:00 +0000] End!
那么,解决方案是什么?很简单,您需要改用debounce
。
func testWithDebounce() -> Observable<String> {
return
Observable.of("A") // 1
.concat(Observable.never()) // 2
.debounce(3.0, scheduler: Schedulers.background) // 3
.take(1) // 4
// 1. -A-|->
// 2. -A------------------------------>
// 3. ---------------A---------------->
// 4. ---------------A-|->
}
...
[2017-06-03 03:24:21 +0000] Start Thrrotle!
[2017-06-03 03:24:21 +0000] Finish Thrrotle!
[2017-06-03 03:24:24 +0000] event: next(A)
[2017-06-03 03:24:24 +0000] event: completed
谢谢,我知道'never'的用法,所以我不明白为什么使用never(),所以这只是个例子〜 –