CatchMixin

public protocol CatchMixin : Thenable

Provides catch and recover to your object that conforms to Thenable

  • catch(on:flags:policy:_:) Extension method

    The provided closure executes when this promise rejects.

    Rejecting a promise cascades: rejecting all subsequent promises (unless recover is invoked) thus you will typically place your catch at the end of a chain. Often utility promises will not have a catch, instead delegating the error handling to the caller.

    See also

    Cancellation

    Declaration

    Swift

    @discardableResult
    func `catch`(on: DispatchQueue? = conf.Q.return, flags: DispatchWorkItemFlags? = nil, policy: CatchPolicy = conf.catchPolicy, _ body: @escaping (Error) -> Void) -> PMKFinalizer

    Parameters

    on

    The queue to which the provided closure dispatches.

    policy

    The default policy does not execute your handler for cancellation errors.

    execute

    The handler to execute if this promise is rejected.

    Return Value

    A promise finalizer.

  • recover(on:flags:policy:_:) Extension method

    The provided closure executes when this promise rejects.

    Unlike catch, recover continues the chain. Use recover in circumstances where recovering the chain from certain errors is a possibility. For example:

    firstly {
        CLLocationManager.requestLocation()
    }.recover { error in
        guard error == CLError.unknownLocation else { throw error }
        return .value(CLLocation.chicago)
    }
    

    See also

    Cancellation

    Declaration

    Swift

    func recover<U>(on: DispatchQueue? = conf.Q.map, flags: DispatchWorkItemFlags? = nil, policy: CatchPolicy = conf.catchPolicy, _ body: @escaping (Error) throws -> U) -> Promise<T> where U : Thenable, Self.T == U.T

    Parameters

    on

    The queue to which the provided closure dispatches.

    body

    The handler to execute if this promise is rejected.

  • recover(on:flags:_:) Extension method

    The provided closure executes when this promise rejects. This variant of recover requires the handler to return a Guarantee, thus it returns a Guarantee itself and your closure cannot throw.

    Note

    Note it is logically impossible for this to take a catchPolicy, thus allErrors are handled.

    See also

    Cancellation

    Declaration

    Swift

    @discardableResult
    func recover(on: DispatchQueue? = conf.Q.map, flags: DispatchWorkItemFlags? = nil, _ body: @escaping (Error) -> Guarantee<T>) -> Guarantee<T>

    Parameters

    on

    The queue to which the provided closure dispatches.

    body

    The handler to execute if this promise is rejected.

  • ensure(on:flags:_:) Extension method

    The provided closure executes when this promise resolves, whether it rejects or not.

    firstly {
        UIApplication.shared.networkActivityIndicatorVisible = true
    }.done {
        //…
    }.ensure {
        UIApplication.shared.networkActivityIndicatorVisible = false
    }.catch {
        //…
    }
    

    Declaration

    Swift

    func ensure(on: DispatchQueue? = conf.Q.return, flags: DispatchWorkItemFlags? = nil, _ body: @escaping () -> Void) -> Promise<T>

    Parameters

    on

    The queue to which the provided closure dispatches.

    body

    The closure that executes when this promise resolves.

    Return Value

    A new promise, resolved with this promise’s resolution.

  • ensureThen(on:flags:_:) Extension method

    The provided closure executes when this promise resolves, whether it rejects or not. The chain waits on the returned Guarantee<Void>.

    firstly {
        setup()
    }.done {
        //…
    }.ensureThen {
        teardown()  // -> Guarante<Void>
    }.catch {
        //…
    }
    

    Declaration

    Swift

    func ensureThen(on: DispatchQueue? = conf.Q.return, flags: DispatchWorkItemFlags? = nil, _ body: @escaping () -> Guarantee<Void>) -> Promise<T>

    Parameters

    on

    The queue to which the provided closure dispatches.

    body

    The closure that executes when this promise resolves.

    Return Value

    A new promise, resolved with this promise’s resolution.

  • cauterize() Extension method

    Consumes the Swift unused-result warning.

    Note

    You should catch, but in situations where you know you don’t need a catch, cauterize makes your intentions clear.

    Declaration

    Swift

    @discardableResult
    func cauterize() -> PMKFinalizer

Available where T == Void

  • recover(on:flags:_:) Extension method

    The provided closure executes when this promise rejects.

    This variant of recover is specialized for Void promises and de-errors your chain returning a Guarantee, thus you cannot throw and you must handle all errors including cancellation.

    See also

    Cancellation

    Declaration

    Swift

    @discardableResult
    func recover(on: DispatchQueue? = conf.Q.map, flags: DispatchWorkItemFlags? = nil, _ body: @escaping (Error) -> Void) -> Guarantee<Void>

    Parameters

    on

    The queue to which the provided closure dispatches.

    body

    The handler to execute if this promise is rejected.

  • recover(on:flags:policy:_:) Extension method

    The provided closure executes when this promise rejects.

    This variant of recover ensures that no error is thrown from the handler and allows specifying a catch policy.

    See also

    Cancellation

    Declaration

    Swift

    func recover(on: DispatchQueue? = conf.Q.map, flags: DispatchWorkItemFlags? = nil, policy: CatchPolicy = conf.catchPolicy, _ body: @escaping (Error) throws -> Void) -> Promise<Void>

    Parameters

    on

    The queue to which the provided closure dispatches.

    body

    The handler to execute if this promise is rejected.