使用相同的/ catch / finally块来表示两种不同类型的承诺

时间:2015-08-13 11:52:01

标签: ios swift promisekit

我有以下操作:

class CreateObjectOperation {
    // ...

    func promise() -> Promise<Object>
}

class DeleteObjectOperation {
    // ...

    func promise() -> Promise<Void>
}

我希望能够为两者使用相同的then/catch/finally块。我尝试了以下方法:

let foo: Bool = ...
firstly {
    (foo ?
        CreateObjectOperation().promise() :
        DeleteObjectOperation().promise()
    ) as Promise<AnyObject>
}.then { _ -> Void in
    // ...
}.finally {
    // ...
}.catch { error in
    // ...
}

但这不会编译。有没有任何可行的解决方案(除了将代码从块移动到单独的函数,我想避免)?

1 个答案:

答案 0 :(得分:0)

找到它:

firstly { _ -> Promise<Void>
    (foo ?
        CreateObjectOperation().promise().then { _ in Promise<Void>() } :
        DeleteObjectOperation().promise()
    ) as Promise<AnyObject>
}.then { _ -> Void in
    // ...
}