使用 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 的知识。