PromiseKit 分支承诺
Posted
技术标签:
【中文标题】PromiseKit 分支承诺【英文标题】:PromiseKit branching promise 【发布时间】: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() -> Promise<AnyObject> return Promise fulfill, reject in fulfill(1) .then _ -> Void in debugPrint("foo") .then _ -> Promise<AnyObject> in if false return Promise fulfill, reject in fulfill(0) return Promise fulfill, reject in fulfill(0)
就可以了;但我必须明确返回一个空洞的承诺似乎有点蹩脚@jtbandes
你的目标是什么?为什么会有这个if false
分支?
只是为了澄清闭包可以返回 void 或解析为某个对象的承诺;我不清楚 PromiseKit 的“then”方法的实现以及它在引擎盖下的作用@jtbandes
尝试返回一个可选的?
【参考方案1】:
根据代码示例,我认为没有理由返回 AnyObject。如果你想有选择地返回 Void 或 Object,那么做一个包含可选的 promise。
func sample() -> Promise<AnyObject?>
return Promise fulfill, reject in
functionForGettingObjectWithCallback() result: AnyObject? in
fulfill(result)
【讨论】:
以上是关于PromiseKit 分支承诺的主要内容,如果未能解决你的问题,请参考以下文章