gpt4 book ai didi

ios - ReactiveCocoa : How to prevent RACSignal from being executed twice in parallel?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:59:43 26 4
gpt4 key购买 nike

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

根据 API 调用的结果,我主要填充了 UITableViews。

有多个事件导致每个 API 请求重新加载/刷新 View :

  • 在应用程序启动时
  • viewDidAppear 在每个标签中
  • 当用户使用 PullToRefresh 时
  • 当应用自行决定随时获取新数据时

如何防止在当前正在执行的同一端点请求完成之前执行新的 API 请求?

我知道,我可以使用“throttle”来限制用户输入,例如点击事件。但正如已经提到的,有几种情况可以启动新的 API 请求。

我可以使用标志,这些标志在开始请求时设置,并将在“完成” block 中重置。

但是 ReactiveCocoa 中有内置的方法可以代替吗?

最佳答案

正如@Jakub-Vanu 所说,RACCommand 是您的 friend 。

您可以拥有一个返回信号的 RACCommand,该信号将网络请求的结果作为 Next 事件发送。

let apiFetchCommand: RACCommand = RACCommand(signalBlock: { [weak self](object: AnyObject!) -> RACSignal! in
return self.fetchSignal()
})

然后,如果您想要一个信号发送来自该命令的下一个事件,您可以使用 RACCommand 上的 executionSignals 属性。

let fetchedResultsSignal: RACSignal = self.apiFetchCommand.executionSignals.switchToLatest()

此信号可用于收听该命令的结果。

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

然后执行命令只需调用

self.apiFetchCommand.execute(someObject)

关于ios - ReactiveCocoa : How to prevent RACSignal from being executed twice in parallel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30557181/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com