【问题标题】:PromiseKit branching promisePromiseKit 分支承诺
【发布时间】:2016-05-13 02:02:47
【问题描述】:

假设你的 Promise 链中有一个可以不返回任何内容或 AnyObject 承诺的分支。你会指定什么作为'then'闭包的返回类型?例如:

func sample() -> Promise<AnyObject> {
    return Promise { fulfill, reject in
        fulfill(1)
    }
    .then { _ -> Void in
        if false {
            return Promise { fulfill, reject in
                fulfill(0)
            }
        }
    }
}

如果我将 Void 作为“then”闭包的返回类型,则会出现段错误;如果我将 Promise 作为返回类型,则会出现错误:

missing return in a closure expected to return Promise<AnyObject>

有什么建议吗?

谢谢

【问题讨论】:

  • 如果你使用Promise作为返回类型,你必须返回一个Promise。现在你只能从 if false 内部执行此操作,它永远不会被执行。
  • 如果我改成func sample() -&gt; Promise&lt;AnyObject&gt; { return Promise { fulfill, reject in fulfill(1) }.then { _ -&gt; Void in debugPrint("foo") }.then { _ -&gt; Promise&lt;AnyObject&gt; in if false { return Promise { fulfill, reject in fulfill(0) } } return Promise { fulfill, reject in fulfill(0) } } } 就可以了;但我必须明确返回一个空洞的承诺似乎有点蹩脚@jtbandes
  • 你的目标是什么?为什么会有这个if false 分支?
  • 只是为了澄清闭包可以返回 void 或解析为某个对象的承诺;我不清楚 PromiseKit 的“then”方法的实现以及它在引擎盖下的作用@jtbandes
  • 尝试返回一个可选的?

标签: xcode swift promisekit


【解决方案1】:

根据代码示例,我认为没有理由返回 AnyObject。如果你想有选择地返回 Void 或 Object,那么做一个包含可选的 promise。

func sample() -> Promise<AnyObject?> {
    return Promise { fulfill, reject in
        functionForGettingObjectWithCallback() { result: AnyObject? in
            fulfill(result)
        }
    }
}

【讨论】:

    猜你喜欢
    • 2017-10-09
    • 2016-01-06
    • 1970-01-01
    • 2015-12-14
    • 1970-01-01
    • 2015-09-05
    • 1970-01-01
    • 1970-01-01
    • 2016-02-08
    相关资源
    最近更新 更多