Ios PromiseKit 6.13.1不符合';表';当我尝试使用承诺时<;字符串>;功能
我发现在一个看似简单的情况下使用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)
承诺
,但我似乎找不到一种方法将它们与``首先{}语法一起使用,然后{}语法:
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
}