Ios 失败后如何重新启动dataTaskPublisher?
我有一些代码,当计数值改变时向网络发出请求Ios 失败后如何重新启动dataTaskPublisher?,ios,swift,reactive-programming,combine,Ios,Swift,Reactive Programming,Combine,我有一些代码,当计数值改变时向网络发出请求 @Published var count: Float = 0 init(data: SomeData) { /// $count .debounce(for: .seconds(1), scheduler: RunLoop.main) .filter { return $0 != self.product.quantity } .setFailureType(to: APIProviderError.sel
@Published var count: Float = 0
init(data: SomeData) {
///
$count
.debounce(for: .seconds(1), scheduler: RunLoop.main)
.filter { return $0 != self.product.quantity }
.setFailureType(to: APIProviderError.self)
.flatMap { val -> AnyPublisher<Cart, APIProviderError> in
return self.cartService.update(item: params)
}
}
.sink { result in
print(result)
} receiveValue: { cart in
print(cart)
}
.store(in: &cancellable)
///
}
@已发布变量计数:Float=0
init(数据:SomeData){
///
美元计数
.debounce(用于:。秒(1),调度程序:RunLoop.main)
.filter{返回$0!=self.product.quantity}
.setFailureType(收件人:APIProviderError.self)
.flatMap{val->AnyPublisher中的
返回self.cartService.update(项目:params)
}
}
.sink{导致
打印(结果)
}receiveValue:{cart in
打印(购物车)
}
.store(位于:&可取消)
///
}
cartService.update返回dataTaskPublisher
当返回任何错误时,将不再调用flatmap。
我可以重新启动吗
我可以重新启动吗
不可以。在联合收割机框架中,当一个管道出现故障时,整个管道将被取消,发布程序也将完成
但是,在flatMap
中,可以构建一个执行catch
的迷你管道,并防止故障逃逸到外部管道中。如果需要,您可以继续使用外部管道
此外,如果您认为这会有任何好处,您可以通过
重试
来防止错误传播,这将再次尝试获取。数据任务发布者只获取一次,除非重试使其重试。谢谢!我试试看。你有关于出版商生命周期文档的链接吗?谢谢你可以读我关于联合收割机的整本书。旁注:您可以使用removeDuplicates()
publisher代替过滤器。