gpt4 book ai didi

ios - 如何使用 dataTaskPublisher 链接多个 API 调用?

转载 作者:可可西里 更新时间:2023-11-01 01:06:57 25 4
gpt4 key购买 nike

我想从 REST API 获取数据,为此,我需要先获取 ID 数组 - 第一次调用。之后,我需要使用每个 ID 进行 API 调用。我不想使用 completionHandlers,而是使用 Combine。我从 dataTaskPublishers 开始,但我不确定如何链接它们才能正常工作 🤔

到目前为止,这是我的代码:

   private func getIDs(for type: DataType) -> AnyPublisher<[ID], Error> {
guard let url = URL(string: "url")
else { fatalError("Wrong URL") }

return session.dataTaskPublisher(for: url)
.receive(on: RunLoop.main)
.map { $0.data }
.decode(type: [ID].self, decoder: decoder)
.eraseToAnyPublisher()
}

private func getData(with id: ID) -> AnyPublisher<MyData, Error> {
guard let url = URL(string: "url_with_id")
else { fatalError("Wrong URL") }
return session.dataTaskPublisher(for: url)
.receive(on: RunLoop.main)
.map { $0.data }
.decode(type: MyData.self, decoder: decoder)
.eraseToAnyPublisher()
}

我不太确定如何连接它们以获得可分配给我的状态变量的东西 - MyData 数组。

最佳答案

https://stackoverflow.com/a/56786412/1271826 中的建议, 你可以使用 collect() :

func getAllData(for type: DataType) -> AnyPublisher<[MyData], Error> {
getIDs(for: type).flatMap { ids in
Publishers.Sequence(sequence: ids.map { self.getData(with: $0) })
.flatMap { $0 }
.collect()
}.eraseToAnyPublisher()
}

关于ios - 如何使用 dataTaskPublisher 链接多个 API 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57455076/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com