使用 PromiseKit 我想进行多次 API 调用
Using PromiseKit I want to make multiple API calls
我在我的项目中使用 PromiseKit,我需要对 API 进行 batch/multiple 调用并等待所有响应。任何想法如何做到这一点?我是 PromiseKit 的新手,在他们的 Github 上没有找到任何与此相关的信息(可能没有看到或理解它)
我目前正在尝试但失败的是:
let ids = [1, 2, 3, 4, 5]
firstly {
getURLPathsFor(ids) // maybe I'm doing this wrong - this returns a Promise<[String]>
}.thenMap { url in
ApiManager.shared.request(url, method: .delete)
}.done { _ in
seal.fulfill(())
}.catch { error in
seal.reject(error)
}
func getURLPathsFor(_ ids: [UInt]) -> Promise<[String]> {
let path = "/somePath"
var URLs = [String]()
return Promise { seal in
ids.forEach { uid in
AppConfigManager.shared.getApiUrl(path: path, uid).done { url in
URLs.append(url)
seal.fulfill(URLs)
}.catch { error in
seal.reject(error)
}
}
}
}
任何帮助都会很棒,真的坚持这个。
所以我设法使用 PromiseKit 实现了我想要的批处理调用并一起处理所有错误:
private func batchDeleteItem(with itemId: UInt) -> Promise<(UInt, AppError?)> {
return Promise { seal in
firstly {
AppConfigManager.shared.getApiUrl(path: Constants.Api.deleteItemRequestPath, itemId)
}.then { url in
ApiManager.shared.request(url, method: .delete)
}.done { _ in
seal.fulfill((itemId, nil))
}.catch { error in
guard let appError = error as? AppError else {
seal.reject(error)
return
}
seal.fulfill((itemId, appError))
}
}
}
我在地图中调用了这个方法,为了收集无法删除的项目的 ID,我也用 fulfill 处理捕获 - 只拒绝服务器端错误(这是我需要的我的情况):
return Promise { seal in
let promises = ids.map { itemId in
batchDeleteNode(with: itemId)
}
when(fulfilled: promises).done { results in
seal.fulfill(results)
}.catch { error in
seal.reject(error)
}
}
为了将所有错误分组并等待我使用 when(fulfilled: promises).done {...}
我不是说它是完美的,但似乎工作得很好,我在这个过程中学到了很多关于 PromiseKit 的知识。
我在我的项目中使用 PromiseKit,我需要对 API 进行 batch/multiple 调用并等待所有响应。任何想法如何做到这一点?我是 PromiseKit 的新手,在他们的 Github 上没有找到任何与此相关的信息(可能没有看到或理解它)
我目前正在尝试但失败的是:
let ids = [1, 2, 3, 4, 5]
firstly {
getURLPathsFor(ids) // maybe I'm doing this wrong - this returns a Promise<[String]>
}.thenMap { url in
ApiManager.shared.request(url, method: .delete)
}.done { _ in
seal.fulfill(())
}.catch { error in
seal.reject(error)
}
func getURLPathsFor(_ ids: [UInt]) -> Promise<[String]> {
let path = "/somePath"
var URLs = [String]()
return Promise { seal in
ids.forEach { uid in
AppConfigManager.shared.getApiUrl(path: path, uid).done { url in
URLs.append(url)
seal.fulfill(URLs)
}.catch { error in
seal.reject(error)
}
}
}
}
任何帮助都会很棒,真的坚持这个。
所以我设法使用 PromiseKit 实现了我想要的批处理调用并一起处理所有错误:
private func batchDeleteItem(with itemId: UInt) -> Promise<(UInt, AppError?)> {
return Promise { seal in
firstly {
AppConfigManager.shared.getApiUrl(path: Constants.Api.deleteItemRequestPath, itemId)
}.then { url in
ApiManager.shared.request(url, method: .delete)
}.done { _ in
seal.fulfill((itemId, nil))
}.catch { error in
guard let appError = error as? AppError else {
seal.reject(error)
return
}
seal.fulfill((itemId, appError))
}
}
}
我在地图中调用了这个方法,为了收集无法删除的项目的 ID,我也用 fulfill 处理捕获 - 只拒绝服务器端错误(这是我需要的我的情况):
return Promise { seal in
let promises = ids.map { itemId in
batchDeleteNode(with: itemId)
}
when(fulfilled: promises).done { results in
seal.fulfill(results)
}.catch { error in
seal.reject(error)
}
}
为了将所有错误分组并等待我使用 when(fulfilled: promises).done {...}
我不是说它是完美的,但似乎工作得很好,我在这个过程中学到了很多关于 PromiseKit 的知识。