2

我正在尝试使用 PromiseKit,并且在解决这个问题时遇到了一些麻烦。我有一个类似的功能

func lengthyOperation() -> Promise<TestObject> {
   return Promise { fulfil, reject in
     dispatch_async(GlobalUserInitiatedQueue) {
       do {
          let testObject = ...
          fulfil(testObject)
       } catch {
          reject(error)
       }
     } 
   }
}

我有另一个函数,我想调用它,并返回另一个承诺

func lengthyOperation2() -> Promise<Test2Object> {
   return Promise { fulfil, reject in 
        let test2Object = ...
        if test2Object == nil {
           lengthyOperation().then { testObject: TestObject in
               let test2Object = doSomethingWithTestObject(testObject) 
              fulfil(test2Object) //Compiler error here
           }.error {
              reject(error)
           }
        } else {
           fulfil(test2Object)
        }
   }
}

我得到一个编译器错误说

Cannot convert return expression of type 'Void' (aka '()') to return type 'AnyPromise'

几个问题:

  1. 我需要在 promise 调用中使用 dispatch_async 吗?
  2. 我该如何去调用和返回这样的嵌套承诺?

谢谢

编辑:更正一些伪代码

4

1 回答 1

0

以防万一它帮助别人,

  1. 从文档中,promise 调用是在与调用它的队列相同的队列上进行的。因此,如果我们希望代码在后台运行(在第一个 longyOperation() 中),则需要将其包装在 dispatch_async 或类似文件中。
  2. 我似乎已经按照以下模式进行了工作

    func lengthyOperation2() -> Promise<Test2Object> {
        return firstly {
           return lengthyOperation()
        }.then { (testObject: TestObject) -> Promise<Test2Object> in
           let test2Object = doSomethingWithTestObject(testObject)
           return Promise(test2Object)
        }
    }
    
于 2016-07-11T19:41:09.677 回答