1

I have the following operations:

class CreateObjectOperation {
    // ...

    func promise() -> Promise<Object>
}

class DeleteObjectOperation {
    // ...

    func promise() -> Promise<Void>
}

I want to be able to use the same then/catch/finally blocks for both. I tried the following:

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

but this does not compile. Is there any working solution (apart from moving the code from blocks to separate functions, which I would like to avoid)?

Andrii Chernenko
  • 9,873
  • 7
  • 71
  • 89

1 Answers1

0

Found it:

firstly { _ -> Promise<Void>
    (foo ?
        CreateObjectOperation().promise().then { _ in Promise<Void>() } :
        DeleteObjectOperation().promise()
    ) as Promise<AnyObject>
}.then { _ -> Void in
    // ...
}
Andrii Chernenko
  • 9,873
  • 7
  • 71
  • 89