Swift + Combine 中是否有类似于 PromiseKit 的 "ensure" 函数?

3
我希望无论发布链的结果如何都能运行一段代码块。在Combine + Swift中是否有类似的东西?
类似下面这样的东西:
func doSomeLongRunningTask() -> AnyPublisher<Void, Error> {
  return Future<Void, Error> {
    showSpinner()
  }.tryMap {
    longRunningTaskCanThrowError()
  }.ensure {
    hideSpinner()
  }.eraseToAnyPublisher()
}
1个回答

3
最接近的应该是handleEvents:
func doSomeLongRunningTask() -> AnyPublisher<Void, Error> {
  return Future<Void, Error> {
    showSpinner()
  }.tryMap {
    longRunningTaskCanThrowError()
  }.handleEvents(receiveCompletion: { _ in
    hideSpinner()
  }).eraseToAnyPublisher()
}

receiveCompletion中的代码将在发布者成功完成或出现错误时运行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接