实例方法
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:)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。