使用ReactiveCocoa,如何从重复的信号中链接信号?
我想做这样的事情: 每隔5秒,我就会运行一次网络请求。
为此,我创建了一个重复信号
RACSignal *each5SecondSignal = [[[RACSignal interval:5 onScheduler:[RACScheduler mainThreadScheduler]] take:1] concat:[RACSignal 5 onScheduler:[RACScheduler mainThreadScheduler]]];
和获取数据的信号
RACSignal* iframeSignal = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {....
但我不知道如何将它们联系起来。这是我的尝试(使用'then'方法)。
//This doesn't work, the log do not appear
[[each5SecondSignal then:^RACSignal *{
return iframeSignal;
}] subscribeNext:^(id x) {
NSLog(@"Request was made");
}];
然而,当我[iframeSignal subscribeNext...]
时,会调用信号的内容,当我这样做时
//OK is logged every 5 seconds
[each5SecondSignal subscribeNext:^(id x) {
NSLog(@"OK");
}];
日志按预期显示。
你可以帮帮我吗?此致
Jery
答案 0 :(得分:3)
首先,each5SecondSignal
可以更加简单。您不必调用take:
,因为它会在5秒后完成信号,如果我理解正确,您希望信号永远持续下去。
RACSignal *each5SecondSignal = [RACSignal interval:5 onScheduler:[RACScheduler mainThreadScheduler]]
您可以使用flattenMap:
,以便每次iframeSignal
发送下一个值(每5秒发生一次)时调用each5SecondSignal
:
[[each5SecondSignal flattenMap:^RACStream *(id value) {
return iframeSignal;
}] subscribeNext:^(id x) {
NSLog(@"Request was made");
}];