【发布时间】:2021-01-19 23:06:47
【问题描述】:
创建模型所需的数据是拆分的,只能通过两个 API 请求接收。
第一个 (query.snapshotPublisher()) 发布者将获得模型的主要部分(包括它的 ID),第二个请求 (getPersonalLikeCount(blogModel: blogModel, userID: "408VYXScmxUtUQB91EoTf0LEMgj2")) 将获得一些额外的数据并需要 ID(这是模型的一部分)为什么我要传递从第一个请求中获得的完整模型)。
如果两个请求都是独立的,我将使用 .Zip(other: ) 运算符,但由于第二个依赖于第一个,我尝试了以下方法以将模型传递给第二个发布者。
但是通过这种方法,第二个发布者在发送第一个值后会被取消,因此即使getPersonalLikeCount 发布者获得新数据并应该再次发布它们也不会更新模型。
private func getBlogs(from query: Query) -> AnyPublisher<BlogModel, Error> {
let publisher = query.snapshotPublisher()
.flatMap { [self] blogModel -> AnyPublisher<(BlogModel, Int), Never> in
let blogModelPublisher = Just(blogModel)
let likeCountPublisher = getPersonalLikeCount(blogModel: blogModel, userID: "408VYXScmxUtUQB91EoTf0LEMgj2")
let combined = Combine.Publishers.Zip(blogModelPublisher, likeCountPublisher)
return combined.eraseToAnyPublisher()
}
.map { blogModel, personalLikeCount -> BlogModel in
var newModel = blogModel
newModel.personalLikeCount = personalLikeCount
return newModel
}
.eraseToAnyPublisher()
return publisher
}
【问题讨论】: