Ser*_*has 5 generics ios swift promisekit
在我的项目中,我有许多函数可以从底层数据源异步获取数据并将结果作为 返回Promise<T>,其中T是可选的模型对象。我需要并行获取 2 个不同的独立对象。为此,我尝试使用when(resolved: [Promise<T>])函数:
let userPromise: Promise<User> = fetchUser(with: userID)
let documentPromise: Promise<Document> = fetchDocument(with: documentID)
when(resolved: [userPromise, documentPromise]).done {
...
}
Run Code Online (Sandbox Code Playgroud)
但我收到了一个错误Cannot invoke 'when' with an argument list of type '(resolved: [Any])'。我试图将承诺分配给显式声明的数组:
let promises: [Promise<Any>] = [userPromise, documentPromise]
但现在我收到了一个Promise<User>无法分配给Promise<Any>. 坦率地说,我无法围绕它。那里有什么问题?
PS为了使事情更容易掌握,我创建了以下代码段:
func getPromise() -> Promise<String> {
return Promise<String>.pending().promise
}
let promise: Promise<Any> = getPromise()
Run Code Online (Sandbox Code Playgroud)
这会产生类似的错误:Cannot convert value of type 'Promise<String>' to specified type 'Promise<Any>'
任何想法如何解决它?谢谢!
环境: PromiseKit 6.2.4、Swift 4.1、Xcode 9.4
when(resolved:)被声明为只接受相同类型的承诺。这是它的签名:
public func when<T>(resolved promises: Promise<T>...)
Run Code Online (Sandbox Code Playgroud)
你特别需要一个不拒绝when(resolved:)吗?你试过when(fulfilled:_:)吗?不同之处在于后者在提供的承诺之一拒绝后立即拒绝。
如果可以使用when(fullfilled:_:),那么您可以编写如下内容:
when(fulfilled: [userPromise, documentPromise])
.done { user, document in
// ...
}
.catch { error in
// either of promises has been rejected
print(error)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4912 次 |
| 最近记录: |