Reactive programming catch:和subscribeError之间的差异:

Reactive programming catch:和subscribeError之间的差异:,reactive-programming,reactive-cocoa,Reactive Programming,Reactive Cocoa,在中,subscribeError:方法与catch:之间有什么区别?为什么要在catch:中返回信号?-subscribeError:实际订阅:这是行的结尾。而-catch:只是将一个信号转换成一个新信号(实际上并不订阅)。把信号想象成一个程序。当你-catch:订阅错误时,你是在告诉计算机“我想运行这个程序,但我只想在它出错时得到你的回复。”当你-catch:时,你是在说“我有一个可能抛出错误的程序,我想在旧程序的基础上创建一个新程序,以不同的方式处理该错误。” 您必须在-catch:中返回

在中,
subscribeError:
方法与
catch:
之间有什么区别?为什么要在
catch:
中返回信号?

-subscribeError:
实际订阅:这是行的结尾。而
-catch:
只是将一个信号转换成一个新信号(实际上并不订阅)。把信号想象成一个程序。当你
-catch:
订阅错误时,你是在告诉计算机“我想运行这个程序,但我只想在它出错时得到你的回复。”当你
-catch:
时,你是在说“我有一个可能抛出错误的程序,我想在旧程序的基础上创建一个新程序,以不同的方式处理该错误。”

您必须在
-catch:
中返回信号的原因是,它不仅仅用于消除错误:它实际上是用于响应错误。一旦原始信号出错,它就消失了:如果您希望结果信号在故障后继续运行,您必须在
-catch:
中给出一个新信号

您可以在
-catch:
中执行的操作示例:

  • 如果希望以静默方式失败而不抛出错误,请返回
    [RACSignal empty]
  • 如果要在执行某项操作后重新显示错误,或者可能要转换错误,请返回
    [RACSignal error:err]
  • 返回您想要订阅的其他信号,以防第一个信号出错

  • 很好的解释。从
    -catch:
    内启动AlertView并返回空信号以“抑制”错误似乎是RAC处理错误的一个常见切入点,至少在我的经验中是这样。@terrylewis在处理错误时要小心。由于信号的值可能在任意线程上传递,因此
    -catch:
    块也可能在那里运行。