当我尝试使用 Promise<String> 函数时,PromiseKit 6.13.1 无法符合“Thenable”

Fab*_*eri 5 promise ios swift promisekit thenable

我发现在一个看似简单的情况下使用 PromiseKit 6.13.1 非常困难。我有以下两个返回 a 的函数,Promise<String>但我似乎无法找到一种使用 ```firstly{}.then{} 语法来使用它们的方法:

 func promiseGetJWTToken() -> Promise<String> {
    return Promise<String> { seal in
        let error: Error = NSError(domain: "", code: 2000)
        getJWTToken { tokenJWT in
            guard let tokenJWT = tokenJWT else {
                seal.resolve(.rejected(error))
                return
            }
            seal.resolve(.fulfilled(tokenJWT))
        }
    }
}

func promiseGetBEToken() -> Promise<String> {
    return Promise<String> { seal in
        let error: Error = NSError(domain: "", code: 2000)
        getBEToken { result in
            switch result {
            case .success(let response):
                guard let tokenBE = response.token else {
                    seal.resolve(.rejected(error))
                    return
                }
                seal.fulfill(tokenBE)
            case .failure(let error):
                debugPrint(error)
                seal.resolve(.rejected(error))
            case .none:
                seal.resolve(.rejected(error))
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试使用以下内容时

firstly {
   promiseGetJWTToken()
 }.then { tokenJWT in
   // no need go on because I have issues already here         
 }
Run Code Online (Sandbox Code Playgroud)

我收到:

类型“()”不能符合“Thenable”;只有结构/枚举/类类型可以符合协议

我也试过,它来自自动完成:

promiseGetJWTToken().then { token -> Thenable in
    // no need go on because I have issues already here  
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我收到:

协议 'Thenable' 只能用作通用约束,因为它具有 Self 或关联的类型要求

我决定尝试一下 PromiseKit,因为我在级联上有三个相互依赖的网络调用,但我不认为这会如此困难。谁能告诉我我做错了什么?

pip*_*acs 16

错误信息具有误导性;真正的问题是 .then 闭包应该返回一个新的 Thenable。在您的示例中, .then 闭包是空的。

或者直接使用 .done,如果不是链接承诺的话。


use*_*839 5

他们取代了then { }with 的用法done { }

firstly {
   promiseGetJWTToken()
 }.done { tokenJWT in
   // use your token
 }
Run Code Online (Sandbox Code Playgroud)