gpt4 book ai didi

swift - PromiseKit - 返回嵌套的 promise

转载 作者:行者123 更新时间:2023-11-28 08:33:54 26 4
gpt4 key购买 nike

我正在尝试使用 PromiseKit,但在解决这个问题时遇到了一些麻烦。我有一个函数可以做类似的事情

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

我想在另一个函数中调用它,并返回另一个 promise

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. 我该如何调用和返回这样的嵌套 promise?

谢谢

编辑:修改部分伪代码

最佳答案

万一它能帮助到别人,

  1. 根据文档,promise 调用是在与 which 相同的队列上进行的它被称为从。因此,如果我们希望代码在后台运行(在第一个 lengthyOperation() 中),它将需要包装在 dispatch_async 或类似的东西中。
  2. 我似乎已经通过以下模式让事情正常进行了

    func lengthyOperation2() -> Promise<Test2Object> {
    return firstly {
    return lengthyOperation()
    }.then { (testObject: TestObject) -> Promise<Test2Object> in
    let test2Object = doSomethingWithTestObject(testObject)
    return Promise(test2Object)
    }
    }

关于swift - PromiseKit - 返回嵌套的 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38296737/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com