使用Swift的PromiseKit:终止承诺链

前端之家收集整理的这篇文章主要介绍了使用Swift的PromiseKit:终止承诺链前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试将PromiseKit与 Swift一起使用.我对它并不熟悉,并且似乎没有太多关于它与Swift一起使用的信息.

我似乎无法弄清楚如何终止承诺链.只要最后一个(终端)块然后包含一个语句,一切都很好:

  1. firstly {
  2. // ...
  3. }.then { obj in
  4. self.handleResult(obj)
  5. }.catch { error in
  6. self.handleError(error)
  7. }

但是,如果我尝试添加另一个语句,编译器会抱怨:

  1. firstly {
  2. // ...
  3. }.then { obj in
  4. self.handleResult(obj)
  5. self.doSomethingDifferent(obj)
  6. }.catch { error in // compiler error: Missing return in a closure expected to return 'AnyPromise'
  7. self.handleError(error)
  8. }

显然,解决方案是返回另一个承诺,但它在终端块中没有意义.还有什么我可以做的吗?

根据 http://promisekit.org/PromiseKit-2.0-Released/,在Swift Compiler Issues部分下:

The Swift compiler will often error with then. To figure out the
issue,first try specifying the full signature for your closures:

  1. foo.then { x in
  2. doh()
  3. return bar()
  4. }
  5.  
  6. // will need to be written as:
  7.  
  8. foo.then { obj -> Promise<Type> in
  9. doh()
  10. return bar()
  11. }
  12.  
  13. // Because the Swift compiler cannot infer closure types very
  14. // well yet. We hope this will be fixed.
  15.  
  16. // Watch out for one-line closures though! Swift will
  17. // automatically infer the types,which may confuse you:
  18.  
  19. foo.then {
  20. return bar()
  21. }

因此,您必须将代码更改为:

  1. firstly {
  2. // ...
  3. }.then { obj -> Promise<WhateverTypeDoSomethingDifferentPromises> in
  4. self.handleResult(obj)
  5. self.doSomethingDifferent(obj)
  6. }.catch { error in
  7. self.handleError(error)
  8. }

或者你可以使用obj – >无效阻止链条

猜你在找的Swift相关文章