错误后如何重新订阅RACSignal

时间:2015-10-12 22:35:38

标签: ios objective-c reactive-cocoa

我有一个简单的subscribeNext:error:chain like:

[[self.viewModel signal] subscribeNext:^(id x) {
    NSLog(@"success!");
} error:^(NSError *error) {
    NSLog(@"error");
}];

当我收到错误时,我成功打印error,但似乎永远不再调用链,即使错误后再次从视图模型发送信号。在错误触发后,我似乎无法弄清楚如何使用-retry-repeat重新订阅。有帮助吗?谢谢!

3 个答案:

答案 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)

您需要-[RACSignal retry]

[[[self.viewModel signal] retry] subscribeNext:^(id x) {
    NSLog(@"success!");
} error:^(NSError *error) {
    NSLog(@"error");
}];