Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/99.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 失败后如何重新启动dataTaskPublisher?_Ios_Swift_Reactive Programming_Combine - Fatal编程技术网

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代替过滤器。