对不同类型的两个 Promise 使用相同的 then/catch/finally 块

Posted

技术标签:

【中文标题】对不同类型的两个 Promise 使用相同的 then/catch/finally 块【英文标题】:Using same then/catch/finally blocks for two promises of different types 【发布时间】:2015-08-13 11:52:01 【问题描述】:

我有以下操作:

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】:

找到了:

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

【讨论】:

以上是关于对不同类型的两个 Promise 使用相同的 then/catch/finally 块的主要内容,如果未能解决你的问题,请参考以下文章

加入相同的字段,不同的数据类型

Java中方法重写的两个面试题

C++ Primer 5th笔记(chap 17 标准库特殊设施)bitset类型

对anylogic中的不同任务使用相同的服务块

数组--- 概述创建初始化遍历 ( 27th,Feb)

C++ Primer 5th笔记(chap 19 特殊工具与技术)使用 RTTI