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");
 }];