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