實例方法
timeout(_:
timeout(_:scheduler:options:customError:)
如果上遊發布者超過指定的時間間隔而不產生元素,則終止發布。
聲明
func timeout<S>(
_ interval: S.SchedulerTimeType.Stride,
scheduler: S,
options: S.SchedulerOptions? = nil,
customError: (() -> Self.Failure)? = nil
) -> Publishers.Timeout<Self, S> where S : Scheduler
返回值
如果指定的時間間隔過去而沒有從上遊發布者接收到事件,則終止的發布者。
參數
interval
發布者可以在不發出元素的情況下進行的最大時間間隔,以調度程序的時間係統表示。
scheduler
傳遞事件的調度程序。
options
自定義元素交付的調度程序選項。
customError
發布者超時時執行的閉包。發布者將此閉包返回的失敗作為終止原因發送給訂閱者。
詳述
采用Publisher/timeout(_:scheduler:options:customError:)
如果元素未在您指定的超時間隔內交付,則終止發布者。
在下麵的示例中,PassthroughSubject
發布
元素並配置為如果在 5 秒的 String
TIME_OUT
窗口內沒有接收到新元素則超時。在指定的 2 秒後發布單個值 WAIT_TIME
,之後不再有可用的元素;然後發布者超時並正常完成。
var WAIT_TIME : Int = 2
var TIMEOUT_TIME : Int = 5
let subject = PassthroughSubject<String, Never>()
let cancellable = subject
.timeout(.seconds(TIMEOUT_TIME), scheduler: DispatchQueue.main, options: nil, customError:nil)
.sink(
receiveCompletion: { print ("completion: \($0) at \(Date())") },
receiveValue: { print ("value: \($0) at \(Date())") }
)
DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(WAIT_TIME),
execute: { subject.send("Some data - sent after a delay of \(WAIT_TIME) seconds") } )
// Prints: value: Some data - sent after a delay of 2 seconds at 2020-03-10 23:47:59 +0000
// completion: finished at 2020-03-10 23:48:04 +0000
如果 customError
為 nil
,則發布者正常完成;如果您為 customError
參數提供閉包,上遊發布者將在超時時終止,並將錯誤傳遞給下遊。
可用版本
iOS 13.0+, iPadOS 13.0+, macOS 10.15+, Mac Catalyst 13.0+, tvOS 13.0+, watchOS 6.0+
相關用法
- Swift Result.Publisher tryLast(where:)用法及代碼示例
- Swift Result.Publisher tryCompactMap(_:)用法及代碼示例
- Swift Result.Publisher tryCatch(_:)用法及代碼示例
- Swift Result.Publisher tryReduce(_:_:)用法及代碼示例
- Swift Result.Publisher tryFilter(_:)用法及代碼示例
- Swift Result.Publisher tryFirst(where:)用法及代碼示例
- Swift Result.Publisher tryPrefix(while:)用法及代碼示例
- Swift Result.Publisher tryScan(_:_:)用法及代碼示例
- Swift Result.Publisher tryMap(_:)用法及代碼示例
- Swift Result.Publisher tryDrop(while:)用法及代碼示例
- Swift Result.Publisher throttle(for:scheduler:latest:)用法及代碼示例
- Swift Result.Publisher zip(_:_:_:)用法及代碼示例
- Swift Result.Publisher sink(receiveCompletion:receiveValue:)用法及代碼示例
- Swift Result.Publisher merge(with:_:_:)用法及代碼示例
- Swift Result.Publisher print(_:to:)用法及代碼示例
- Swift Result.Publisher sink(receiveValue:)用法及代碼示例
- Swift Result.Publisher eraseToAnyPublisher()用法及代碼示例
- Swift Result.Publisher setFailureType(to:)用法及代碼示例
- Swift Result.Publisher first(where:)用法及代碼示例
- Swift Result.Publisher output(at:)用法及代碼示例
- Swift Result.Publisher dropFirst(_:)用法及代碼示例
- Swift Result.Publisher merge(with:_:_:_:_:_:_:)用法及代碼示例
- Swift Result.Publisher flatMap(maxPublishers:_:)用法及代碼示例
- Swift Result.Publisher map(_:_:_:)用法及代碼示例
- Swift Result.Publisher catch(_:)用法及代碼示例
注:本文由純淨天空篩選整理自apple.com大神的英文原創作品 Result.Publisher timeout(_:scheduler:options:customError:)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。