Swift 结合 return 第一个未来在第二个评估后的结果

Swift Combine return result of first future after evaluation of second

我有以下情况:

2个期货,一个returns一个我感兴趣的值,另一个做一些操作,returns作废。两者互不相关(因此代码不应混用),但两者都需要在应用程序逻辑中以正确的顺序执行。

我想订阅执行以下操作的发布者:

这是一个无法编译的小代码示例,显示了我想要实现的目标:

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)


你需要.map第二个发布者(voidFuture)的Void结果返回到第一个发布者(intFuture)的结果,这就是.flatMap 会发出:

func combinedFuture() -> AnyPublisher<Int, Error> {
    intFuture().flatMap { result in
        voidFuture().map { _ in result }
    }
    .eraseToAnyPublisher()
}