當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Swift Result.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大神的英文原創作品 Result.Publisher timeout(_:scheduler:options:customError:)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。