我正在尝试构建一个反应式管道,其中一些输入信号的更改将触发异步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成为热门信号。

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

最佳答案

检出-flattenMap:。例如:

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

10-06 05:46