catch:和subscribeError之间的区别:

Ash*_*row 22 reactive-programming reactive-cocoa

ReactiveCocoa中,subscribeError:方法与catch:?之间的区别是什么?你为什么要回信号catch:

Jon*_*ing 32

-subscribeError:实际订阅:这是该行的结束.而-catch:简单地将信号转换为新信号(并且实际上不订阅).把信号想象成一个程序.当你-subscribeError:,你告诉计算机"我想要运行这个程序,但我只想听到它错误的消息." 当你-catch:,你说"我有这个程序可能会抛出一个错误,我想根据处理该错误的旧程序制作一个新程序."

您必须返回信号的原因-catch:是它不仅仅是用于压制错误:它实际上是用于响应错误.一旦原始信号出错,它就会变得越来越好:如果你想让结果信号在失败后继续运行,你必须给出一个新的信号-catch:.

你可以做的例子-catch::

  1. 返回[RACSignal empty]如果你想静静地失败,并不会引发错误.
  2. 返回[RACSignal error:err]如果你想要做的事情后重新抛出的错误,或者您要变换的错误.
  3. 如果第一个错误输出,请返回您要订阅的其他信号.

  • @terrylewis但要小心那里的线程.由于信号的值可以在任意线程上传递,因此`-catch:`块也可以在那里运行. (2认同)