我有一个简单的subscribeNext:error:chain like:
[[self.viewModel signal] subscribeNext:^(id x) {
NSLog(@"success!");
} error:^(NSError *error) {
NSLog(@"error");
}];
当我收到错误时,我成功打印error
,但似乎永远不再调用链,即使错误后再次从视图模型发送信号。在错误触发后,我似乎无法弄清楚如何使用-retry
或-repeat
重新订阅。有帮助吗?谢谢!
答案 0 :(得分:3)
好!我找到了答案:你需要{catch}阻塞catch
错误,返回带有错误的RACSignal,然后retry
,然后subscribeNext
返回成功回调。像:
[[[[self.viewModel signal] catch:^RACSignal *(NSError *error) {
// Handle the error here
return [RACSignal error:error];
}] retry] subscribeNext:^(id x) {
// Do your success stuff
}];
答案 1 :(得分:1)
如果将-catch:
放在-flattenMap:
内,则外部信号不会出错。
https://github.com/ReactiveCocoa/ReactiveCocoa/issues/1218
答案 2 :(得分:0)
[[[self.viewModel signal] retry] subscribeNext:^(id x) {
NSLog(@"success!");
} error:^(NSError *error) {
NSLog(@"error");
}];