Ios 错误后如何重新订阅RACSignal
我有一个简单的subscribeNext:error:chain-like:Ios 错误后如何重新订阅RACSignal,ios,objective-c,reactive-cocoa,Ios,Objective C,Reactive Cocoa,我有一个简单的subscribeNext:error:chain-like: [[self.viewModel signal] subscribeNext:^(id x) { NSLog(@"success!"); } error:^(NSError *error) { NSLog(@"error"); }]; 当我收到一个错误时,我成功地打印了这个错误,但是看起来这个链似乎再也不会被调用了,即使这个信号在错误发生后再次从视图模型发送。我似乎不知道在错误触发后如何使用-retr
[[self.viewModel signal] subscribeNext:^(id x) {
NSLog(@"success!");
} error:^(NSError *error) {
NSLog(@"error");
}];
当我收到一个错误时,我成功地打印了这个错误,但是看起来这个链似乎再也不会被调用了,即使这个信号在错误发生后再次从视图模型发送。我似乎不知道在错误触发后如何使用-retry或-repeat重新订阅。有什么帮助吗?谢谢 您需要:
你需要:
好的!我找到了答案:您需要用catch块捕获错误,返回带有错误的RACSignal,然后重试,然后订阅成功回调的下一步。比如:
[[[[self.viewModel signal] catch:^RACSignal *(NSError *error) {
// Handle the error here
return [RACSignal error:error];
}] retry] subscribeNext:^(id x) {
// Do your success stuff
}];
好的!我找到了答案:您需要用catch块捕获错误,返回带有错误的RACSignal,然后重试,然后订阅成功回调的下一步。比如:
[[[[self.viewModel signal] catch:^RACSignal *(NSError *error) {
// Handle the error here
return [RACSignal error:error];
}] retry] subscribeNext:^(id x) {
// Do your success stuff
}];
如果将-catch:放入-flattmap:,则外部信号不会出错。
如果将-catch:放在-flattmap:内,则外部信号不会出错。
这似乎对我不起作用,如果我将重试添加到信号中,它甚至不是第一次调用!如果有问题,viewModel中的RACSignal将被发送错误,如:[RACSubject*self.signal sendError:error];这似乎对我不起作用,如果我将重试添加到信号中,它甚至不是第一次调用!如果有问题,viewModel中的RACSignal将被发送错误,如:[RACSubject*self.signal sendError:error];