xcode 合并-对数组中元素的各种发布者执行操作

lx0bsm1f  于 2022-11-17  发布在  其他
关注(0)|答案(1)|浏览(126)

我有我的职责

func synch(cID: Int) -> AnyPublisher<Void, Error> {
        summariesCache
            .lastUpdateTimestamp(cID: cID)
            .prefix(1)
            .flatMap { self.sendRequest(withTimestamp: $0, cID: cID) }
            .map { self.cache.uCache(with: $0.data) }
            .eraseToAnyPublisher()
    }

它接受一个参数cID: Int。我想重构它,使这个函数接受参数cID: [Int],它是一个数组,并在每个数组的元素上执行所有操作,仍然返回AnyPublisher<Void, Error>,就像在for循环中使用DispatchGroup进行异步操作和在all结束时完成一样。

amrnrhlw

amrnrhlw1#

假设您的方法(sendRequestuCache等)都异步执行操作,您可以获得cID的发布者,并将其平面Map到您当前拥有的发布者。

func synch(cIDs: [Int]) -> AnyPublisher<Void, Error> {
    cIDs.publisher.flatMap { cID in
        summariesCache
            .lastUpdateTimestamp(cID: cID)
            .prefix(1)
            .flatMap { self.sendRequest(withTimestamp: $0, cID: cID) }
            .map { self.cache.uCache(with: $0.data) }
            .eraseToAnyPublisher()
    }.eraseToAnyPublisher()
}

如果您正在向Web服务器发送请求,在短时间内发送许多请求可能会导致服务器负载过重。如果可能,我建议您在一个请求中发送所有cID。

相关问题