【发布时间】:2020-04-04 21:02:49
【问题描述】:
我正在处理一个遗留库,我不能随意修改它们的代码,并且正在尝试使用 Combine 将它们编织成更易于使用的东西。我的情况是方法调用可以返回一个响应,或者一个响应和两个通知。仅响应是成功场景,响应 + 2 个通知是错误场景。我想将来自两个通知的响应和有效负载组合成一个可以传递给我的应用程序的错误。真正有趣的是,我无法保证响应或通知是否先出现,也不保证哪个通知先出现。通知来自与响应不同的线程。好消息是他们“几乎同时”进来。
为了处理通知,我愿意
firstNotificationSink = notificationCenter.publisher(for: .firstErrorPart, object: nil)
.sink { [weak self] notification in
// parse and get information about the error
}
secondNotificationSink = notificationCenter.publisher(for: .secondErrorPart, object: nil)
.sink { [weak self] notification in
// parse and get more information about the error
}
请求遗留库的响应是:
func doJob() -> String {
let resultString = libDoStuff(reference)
}
如果给定 50 毫秒的时间范围,我有没有办法使用 Combine 将这三个信号合并为一个?意思是,如果我得到结果和两个通知,我可以将错误响应传递给我的应用程序,如果我只有结果并且在 50 毫秒内没有通知到达,那么我可以将该成功响应传递给我的应用程序吗?
【问题讨论】:
-
听起来像是
.timeout和.zip的组合。 -
谢谢,我会直接进入那些