Ios PromiseKit 6.13.1不符合';表';当我尝试使用承诺时<;字符串>;功能

Ios PromiseKit 6.13.1不符合';表';当我尝试使用承诺时<;字符串>;功能,ios,swift,promise,promisekit,thenable,Ios,Swift,Promise,Promisekit,Thenable,我发现在一个看似简单的情况下使用PromiseKit 6.13.1非常困难。 我有以下两个函数返回一个承诺,但我似乎找不到一种方法将它们与``首先{}语法一起使用,然后{}语法: func promiseGetJWTToken() -> Promise<String> { return Promise<String> { seal in let error: Error = NSError(domain: "", code: 2000)

我发现在一个看似简单的情况下使用PromiseKit 6.13.1非常困难。 我有以下两个函数返回一个
承诺
,但我似乎找不到一种方法将它们与``首先{}语法一起使用,然后{}语法:

 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))
            }
        }
    }
}
我收到:

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

我也尝试过,这来自自动完成:

promiseGetJWTToken().then { token -> Thenable in
    // no need go on because I have issues already here  
}
在这种情况下,我收到:

协议“Thenable”只能用作一般约束,因为它具有自身或关联的类型要求


我决定试试PromiseKit,因为我在cascade上有三个相互依赖的网络呼叫,但我没想到这会如此困难。有人能告诉我我做错了什么吗?

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

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

你可以试试

 firstly {
   promiseGetJWTToken()
 }.then { tokenJWT -> Promise<String> in
   return promiseGetBEToken()
 }

首先{
promiseGetJWTToken()
}.然后{tokenJWT->Promise in
归还承诺书
}

首先{
promiseGetJWTToken()
}.然后{tokenJWT->Promise in
允诺
返回承诺值(tokenJWT)
}

他们用
done{}
取代了
然后{}
的用法

firstly {
   promiseGetJWTToken()
 }.done { tokenJWT in
   // use your token
 }
 firstly {
   promiseGetJWTToken()
 }.then { tokenJWT -> Promise<String> in
   promiseGetBEToken() 
   return Promise.value(tokenJWT)
 }
firstly {
   promiseGetJWTToken()
 }.done { tokenJWT in
   // use your token
 }