μ λ€λ¦ ꡬ쑰체
μ΄λμ
λΌμ΄μ λ λ€μ― κ°μ μΈμλ₯Ό λ°λλ€.
upstream
: μμμ νλ₯΄λ Publisher
interval
: νμμμμ μΌμΌν¬ μκ°
scheduler
: μμλ₯Ό λ°ννλ μ€μΌμ€λ¬
options
: μ€μΌμ€λ¬ μ΅μ
customError
: νμμμμ΄ λ°μνμ λ λ°νν μλ¬λ₯Ό λ§λλ ν΄λ‘μ
μμ Publisherμ μ£Όμ΄μ§ μκ° λμ μμκ° μ λ¬λμ§ μμ λ νμμμμ΄ λ°μνμ¬ Publisherλ₯Ό μ’
λ£νλ€.
customError
κ° nilμ΄λ©΄ μ’
λ£νλ©°, nilμ΄ μλλ©΄ μλ¬λ₯Ό λΈλ€.
timeout
μ€νΌλ μ΄ν°μ κ΄λ ¨μ΄ μλ€.
let subject = PassthroughSubject<Int, Error>()
// Publishers.Timeout (customError != nil)
Publishers.Timeout(upstream: subject, interval: .milliseconds(500), scheduler: DispatchQueue.main, options: nil) { error }
.sink(receiveCompletion: { completion in
switch completion {
case .failure:
print("Combine TimeOut Error")
case .finished:
print("Combine TimeOut Finish")
}
}, receiveValue: { value in
print("Combine TimeOut : \(value)")
})
.store(in: &cancellables)
// Combine Timeout Error
// timeout Operator (customError == nil)
subject
.timeout(.milliseconds(500), scheduler: DispatchQueue.main)
.sink(receiveCompletion: { completion in
switch completion {
case .failure:
print("Combine TimeOut Error")
case .finished:
print("Combine TimeOut Finish")
}
}, receiveValue: { value in
print("Combine TimeOut : \(value)")
})
.store(in: &cancellables)
// Combine Timeout Finish
subject
μ κ°μ μ λ¬νλ μ½λκ° μμΌλ―λ‘, μ½λλ₯Ό μ€ννλ©΄ 0.5μ΄ νμ νμμμμ΄ λ°μνλ€.
customError
λ₯Ό μ μν κ²½μ° νμμμμ΄ λ°μν λ μλ¬λ₯Ό λ΄λ©°, customError
λ₯Ό μ μνμ§ μμ κ²½μ° νμμμμ΄ λ°μν λ μ’
λ£νλ€.
RxSwift
timeout
μ€νΌλ μ΄ν°λ₯Ό μ¬μ©νμ¬ κ΅¬νν μ μλ€.
let subject = PublishSubject<Int>()
subject
.timeout(.milliseconds(500), scheduler: MainScheduler.instance)
.subscribe(onNext: { value in
print("RxSwift Timeout : \(value)")
}, onError: { _ in
print("RxSwift Timeout Error")
}, onCompleted: {
print("RxSwift Timeout Finish")
})
.disposed(by: disposeBag)
// RxSwift Timeout Error
ReactiveSwift
timeout
μ€νΌλ μ΄ν°λ₯Ό μ¬μ©νμ¬ κ΅¬νν μ μλ€.
let property = MutableProperty<Int>(0)
property.signal
.timeout(after: 0.5, raising: error, on: QueueScheduler.main)
.observe { event in
switch event {
case let .value(value):
print("ReactiveSwift Timeout : \(value)")
case .failed:
print("ReactiveSwift Timeout Error")
case .completed:
print("ReactiveSwift Timeout Finish")
default:
break
}
}
// ReactiveSwift Timeout Error