2016-05-13 70 views
0

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

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'闭包的返回类型,我得到一个seg故障;如果我把Promise作为返回类型,那么我得到一个错误:

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

有什么建议吗?

谢谢

+0

如果使用'Promise'作为返回类型,则必须返回一个Promise。现在你只能在'if false'的情况下这样做,永远不会执行。 – jtbandes

+0

如果我改变为'FUNC样品() - >无极 { 返回无极{履行,拒绝 满足(1) }。然后{_ - >在 debugPrint( “foo” 的)空隙 }。然后{ _ - >无极在 如果假{ 回报承诺{履行,拒绝 落实(0) } } 回报承诺{履行,拒绝 履行(0) } } }'它的工作原理;但似乎有点跛脚,我不得不明确地返回一个空的承诺@jtbandes – bunana

+0

你的目标是什么?为什么你有这个'假'分支? – jtbandes

回答

1

基于代码示例,我没有理由返回AnyObject。如果你想有选择地返回Void或者Object,那么做一个包含可选项的承诺。

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