3

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

日志按预期显示。

你可以帮帮我吗?

真挚地

杰瑞

4

1 回答 1

3

首先,each5SecondSignal可以简单得多。你不必打电话take:,因为它会导致信号在 5 秒后完成,如果我理解正确,你希望信号永远持续下去。

RACSignal *each5SecondSignal = [RACSignal interval:5 onScheduler:[RACScheduler mainThreadScheduler]]

您可以使用flattenMap:这样iframeSignal每次each5SecondSignal发送下一个值时调用(每 5 秒发生一次):

[[each5SecondSignal flattenMap:^RACStream *(id value) {
   return iframeSignal;
 }] subscribeNext:^(id x) {
   NSLog(@"Request was made");
 }];
于 2015-02-26T21:45:17.433 回答