delay()
일정 시간을 받아서 데이터 발행을 지연시켜주는 함수이다.
fun main() {
val data = listOf("1", "2", "3", "4", "5")
Observable.fromIterable(data)
.delay(500L, TimeUnit.MILLSECONDS) // 0.5초 이후에 데이터를 발행
.subscribe(System.out::println)
sleep(1000)
}
// 1
// 2
// 3
// 4
// 5
timeInterval()
이전 값을 발행한 이후 시간이 얼마나 지났는지 알려주는 함수이다.
fun main() {
val data = listOf("1", "2", "3")
Observable.fromIterable(data)
.delay(
sleep(Random().nextInt(100).toLong())
return@delay Observable.just(it)
)
.timeInterval()
.subscribe(System.out::println) // Timed 객체가 전달
sleep(1000)
}
// Timed[time=57, unit=MILLISECONDS, value=1]
// Timed[time=31, unit=MILLISECONDS, value=2]
// Timed[time=45, unit=MILLISECONDS, value=3]
debounce()
일정시간이 지난 후 제일 마지막으로 들어온 값만 발행하는 함수이다.
fun main() {
val input = BehaviorSubject.create<String>()
for (i in 0..10) {
val text = "${i}초"
input.onNext(text)
sleep(1000)
}
input.debounce(5000L, TimeUnit.MILLSECONDES)
.subscribeOn(Scheduler.computation())
.subscribe(System.out::println)
}
// 10초
throttleFirst()
입력값이 들어온 후, 일정시간이 지난 후에 가장 처음 들어온 값을 발행하는 함수이다.
fun main() {
val input = BehaviorSubject.create<String>()
for (i in 0..10) {
val text = "${i}초"
input.onNext(text)
sleep(1000)
}
input.throttleFirst(5000L, TimeUnit.MILLSECONDES)
.subscribeOn(Scheduler.computation())
.subscribe(System.out::println)
}
// 0초
// 6초
// 12초
// 18초
throttleLast()
입력값이 들어온 후, 일정시간이 지난 후에 가장 마지막으로 들어온 값을 발행하는 함수이다.
fun main() {
val input = BehaviorSubject.create<String>()
for (i in 0..10) {
val text = "${i}초"
input.onNext(text)
sleep(1000)
}
input.throttleLast(5000L, TimeUnit.MILLSECONDES)
.subscribeOn(Scheduler.computation())
.subscribe(System.out::println)
}
// 4초
// 8초
// 14초
// 18초
// 20초