Ios ReactiveCocoa:如何防止RACSignal并行执行两次?

Ios ReactiveCocoa:如何防止RACSignal并行执行两次?,ios,afnetworking,reactive-cocoa,Ios,Afnetworking,Reactive Cocoa,在我的应用程序中,我使用ReactiveCocoa和AFNetworking扩展进行API调用。 对于每个API端点,我都有一个启动API请求并返回RACSignal的方法 通过API调用的结果,我填充了大部分UITableView 存在多个事件,导致每个API请求重新加载/刷新视图: 在应用程序启动时 视图显示在每个选项卡中 当用户使用PullToRefresh时 当应用程序自行决定随时获取新数据时 如何防止在当前执行的对同一端点的请求完成之前执行新的API请求 我知道,我可以使用“节流”

在我的应用程序中,我使用ReactiveCocoa和AFNetworking扩展进行API调用。 对于每个API端点,我都有一个启动API请求并返回RACSignal的方法

通过API调用的结果,我填充了大部分UITableView

存在多个事件,导致每个API请求重新加载/刷新视图:

  • 在应用程序启动时
  • 视图显示在每个选项卡中
  • 当用户使用PullToRefresh时
  • 当应用程序自行决定随时获取新数据时
如何防止在当前执行的对同一端点的请求完成之前执行新的API请求

我知道,我可以使用“节流”来节流用户输入,如点击事件。但正如前面提到的,有几种情况可以启动新的API请求

我可以使用标志,这些标志在启动请求时设置,并将在“完成”块中重置


但是,在ReactiveCocoa中是否有内置的方法可以替代?

因为@Jakub Vanu是您的朋友

您可以使用RAC命令返回一个信号,该信号将网络请求的结果作为下一个事件发送

let apiFetchCommand: RACCommand = RACCommand(signalBlock: { [weak self](object: AnyObject!) -> RACSignal! in
    return self.fetchSignal()
}) 
然后,如果您希望向发送来自该命令的下一个事件的信号,您可以使用RAC命令上的
executionSignals
属性

let fetchedResultsSignal: RACSignal = self.apiFetchCommand.executionSignals.switchToLatest()
该信号可用于监听该命令的结果

RACCommands有一个名为
allowsConcurrentExecution
的属性,该属性默认为false。这意味着,如果命令返回的信号尚未完成,则该命令将不会触发

然后,要执行该命令,只需调用

self.apiFetchCommand.execute(someObject)

您正在查找
RAC命令