我有以下情况:
2 个期货,一个返回我感兴趣的值,另一个执行一些操作并返回 void。两者互不相关(因此代码不应混用),但两者都需要在应用程序逻辑中以正确的顺序执行。
我想做的是订阅执行以下操作的发布者:
这是一个无法编译的小代码示例,它显示了我想要实现的目标:
import Combine
func voidFuture() -> Future<Void, Error> {
return Future<Void, Error> { promise in
promise(.success(()))
}
}
func intFuture() -> Future<Int, Error> {
return Future<Int, Error> { promise in
promise(.success(1))
}
}
func combinedFuture() -> AnyPublisher<Int, Error> {
var intValue: Int!
return intFuture().flatMap { result in
intValue = result
return voidFuture()
}.flatMap{ _ in
return CurrentValueSubject(intValue).eraseToAnyPublisher()
}.eraseToAnyPublisher()
}
var subscriptions = Set<AnyCancellable>()
combinedFuture()
.sink(receiveCompletion: { _ in }, receiveValue: { val in print(val)})
.store(in: &subscriptions)
答案 0 :(得分:0)
您需要将第二个发布者 (.map
) 的 Void
结果voidFuture
返回到第一个发布者 (intFuture
) 的结果,这就是 { {1}} 会发出:
.flatMap