在反应流水线中删除嵌套的subscribeNext

时间:2015-02-04 13:02:28

标签: ios objective-c reactive-programming reactive-cocoa

我正在尝试构建一个反应式管道,其中某些输入信号的更改将触发异步Web api请求。但我不需要在web api的subscribeNext块中执行任何操作。

它的外观如下:

RACSignal *inputChanged = [[RACSignal merge:@[ RACObserve(self, input1), RACObserve(self, input2) ]] throttle:0.5];

@weakify(self)
[[[inputChanged
  subscribeNext:^(id x) {
      @strongify(self)
      [[self asyncWebAPI]
       subscribeNext:^(id x) {
       }];
  }];

这很有效。但由于嵌套的subscribeNext:它不优雅,而第二个subscribeNext只是为了使asyncWebAPI成为一个热门信号。

有没有更好的方法来构建这个管道?

1 个答案:

答案 0 :(得分:1)

结帐-flattenMap:。例如:

[[inputChanged
    flattenMap:^(id _) {
        @strongify(self);
        return [self asyncWebAPI];
    }]
    subscribeNext:^(id x) {
        // Do stuff
    }];