当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Swift Optional.Publisher timeout(_:scheduler:options:customError:)用法及代码示例


实例方法

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 发布 String 元素并配置为如果在 5 秒的 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

如果 customErrornil ,则发布者正常完成;如果您为 customError 参数提供闭包,上游发布者将在超时时终止,并将错误传递给下游。

可用版本

iOS 13.0+, iPadOS 13.0+, macOS 10.15+, Mac Catalyst 13.0+, tvOS 13.0+, watchOS 6.0+

相关用法


注:本文由纯净天空筛选整理自apple.com大神的英文原创作品 Optional.Publisher timeout(_:scheduler:options:customError:)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。