Alamofire 和 PromiseKit 返回一个 Promise<[T]>
Alamofire and PromiseKit returning a Promise<[T]>
我使用 Alamofire 和 PromiseKit 作为单独的 Cocoapod 安装。我可以使用 Alamofire 检索 JSON 数据,但在配置 PromiseKit 时收到以下错误。下面的错误出现在 'fulfill, reject' 所在的行中。
错误消息:上下文闭包类型“(Resolver<_>) -> Void”需要 1 个参数,但闭包主体中使用了 2 个参数
我在模拟器中使用 Xcode 9.2 和 IOS 11.2。提前感谢您的建议!
func wantToReturnAnArrayOfActor() -> Promise<[Actor]> {
return Promise { fulfill, reject in
Alamofire.request(ApiUrl.url.rawValue).responseJSON { (response) in
switch(response.result)
{
case .success(let responseString): print("my response string = \(responseString)")
let actorResponse = ActorApiResponse(JSONString: "\(responseString)")//converts all of the data into the ActorApiResponse model class
return when(fulfilled: actorResponse)
DispatchQueue.main.async {
print("actorResponse = \(String(describing: actorResponse))")
}
case .failure(let error): print("alamofire error = \(error)")
}
}
}
}
是不是应该这样,
func wantToReturnAnArrayOfActor() -> Promise<[Actor]> {
return Promise() { resolver in
Alamofire.request(ApiUrl.url.rawValue).responseJSON { (response) in
switch(response.result)
{
case .success(let responseObject):
let actorResponse = ActorApiResponse(jsonObject: responseObject)
let actors = actorResponse.getActors()
resolver.fulfill(actors)
case .failure(let error):
resolver.reject(error)
}
}
}
}
Promise 的初始化闭包接受单个参数,类型为 Resolver,这就是您的错误所说的。然后,当承诺执行完成时,您可能希望使用 [Actor] 类型的结果解决您的承诺,或者如果在执行过程中发生错误,则拒绝错误。
这里有几点要注意:
- Alamofire.request(_).responseJSON returns json 对象不是 json 字符串。
- 如果您的 ActorApiResponse 是将 json 转换为 [Actor] 的对象,您应该有适当的方法将 json 对象转换为实际数据输入即。 [演员].
您的 ActorApiResponse 可能是这样的,
struct ActorApiResponse {
init(jsonObject: Any) {
}
func getActors() -> [Actor] {
// calculate and return actors
return []
}
}
然后,您可以从其他地方调用它,
wantToReturnAnArrayOfActor().done {
// do something with [Actor here]
// You can also chain the multiple promise using .then instead of using done
}.catch { error in
print("Error occurred \(error)")
}
我使用 Alamofire 和 PromiseKit 作为单独的 Cocoapod 安装。我可以使用 Alamofire 检索 JSON 数据,但在配置 PromiseKit 时收到以下错误。下面的错误出现在 'fulfill, reject' 所在的行中。
错误消息:上下文闭包类型“(Resolver<_>) -> Void”需要 1 个参数,但闭包主体中使用了 2 个参数
我在模拟器中使用 Xcode 9.2 和 IOS 11.2。提前感谢您的建议!
func wantToReturnAnArrayOfActor() -> Promise<[Actor]> {
return Promise { fulfill, reject in
Alamofire.request(ApiUrl.url.rawValue).responseJSON { (response) in
switch(response.result)
{
case .success(let responseString): print("my response string = \(responseString)")
let actorResponse = ActorApiResponse(JSONString: "\(responseString)")//converts all of the data into the ActorApiResponse model class
return when(fulfilled: actorResponse)
DispatchQueue.main.async {
print("actorResponse = \(String(describing: actorResponse))")
}
case .failure(let error): print("alamofire error = \(error)")
}
}
}
}
是不是应该这样,
func wantToReturnAnArrayOfActor() -> Promise<[Actor]> {
return Promise() { resolver in
Alamofire.request(ApiUrl.url.rawValue).responseJSON { (response) in
switch(response.result)
{
case .success(let responseObject):
let actorResponse = ActorApiResponse(jsonObject: responseObject)
let actors = actorResponse.getActors()
resolver.fulfill(actors)
case .failure(let error):
resolver.reject(error)
}
}
}
}
Promise 的初始化闭包接受单个参数,类型为 Resolver,这就是您的错误所说的。然后,当承诺执行完成时,您可能希望使用 [Actor] 类型的结果解决您的承诺,或者如果在执行过程中发生错误,则拒绝错误。
这里有几点要注意:
- Alamofire.request(_).responseJSON returns json 对象不是 json 字符串。
- 如果您的 ActorApiResponse 是将 json 转换为 [Actor] 的对象,您应该有适当的方法将 json 对象转换为实际数据输入即。 [演员].
您的 ActorApiResponse 可能是这样的,
struct ActorApiResponse {
init(jsonObject: Any) {
}
func getActors() -> [Actor] {
// calculate and return actors
return []
}
}
然后,您可以从其他地方调用它,
wantToReturnAnArrayOfActor().done {
// do something with [Actor here]
// You can also chain the multiple promise using .then instead of using done
}.catch { error in
print("Error occurred \(error)")
}