ReactiveCocoa:将信号与重复信号链接起来
ReactiveCocoa : Chain a signal with a repeating signal
使用 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");
}];
日志按预期显示。
你能帮帮我吗?
此致
杰里
首先,each5SecondSignal
可以简单得多。您不必调用 take:
,因为它会导致信号在 5 秒后完成,如果我理解正确的话,您希望信号永远持续下去。
RACSignal *each5SecondSignal = [RACSignal interval:5 onScheduler:[RACScheduler mainThreadScheduler]]
并且您可以使用 flattenMap:
,以便每次 each5SecondSignal
发送下一个值(每 5 秒发生一次)时调用 iframeSignal
:
[[each5SecondSignal flattenMap:^RACStream *(id value) {
return iframeSignal;
}] subscribeNext:^(id x) {
NSLog(@"Request was made");
}];
使用 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");
}];
日志按预期显示。
你能帮帮我吗?
此致
杰里
首先,each5SecondSignal
可以简单得多。您不必调用 take:
,因为它会导致信号在 5 秒后完成,如果我理解正确的话,您希望信号永远持续下去。
RACSignal *each5SecondSignal = [RACSignal interval:5 onScheduler:[RACScheduler mainThreadScheduler]]
并且您可以使用 flattenMap:
,以便每次 each5SecondSignal
发送下一个值(每 5 秒发生一次)时调用 iframeSignal
:
[[each5SecondSignal flattenMap:^RACStream *(id value) {
return iframeSignal;
}] subscribeNext:^(id x) {
NSLog(@"Request was made");
}];