- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在我的应用程序中,我使用 ReactiveCocoa 和 AFNetworking-Extension 进行 API 调用。对于每个 API 端点,我都有一个启动 API 请求并返回 RACSignal 的方法。
根据 API 调用的结果,我主要填充了 UITableViews。
有多个事件导致每个 API 请求重新加载/刷新 View :
如何防止在当前正在执行的同一端点请求完成之前执行新的 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/
例如,我目前的实现如下: - (RACSignal *)getPlaylist { return [RACSignal createSignal:^RACDisposable *(id subsc
使用 ReactiveCocoa,我确定有比这更好的方法吗? RACSignal *crashSignal = [cancelSignal tryMap:^id(id value, NSError *
rac_textSignal-Implementation使用“defer”在“self”上返回 RACSignal。这是什么原因? 这是实现: - (RACSignal *)rac_textSign
我有一个简单的 subscribeNext: error: 链,如: [[self.viewModel signal] subscribeNext:^(id x) { NSLog(@"succ
我已将一些 racsignals 合并为一个 Racsignal。并订阅合并信号。现在,如果我合并的任何信号发送错误事件,所有合并的信号都会被处理掉。如果任何信号失败,我希望所有信号继续执行。 最佳答
我有一个属性,recording,如果 UILongPressGestureRecognizer 处于状态 UIGestureRecognizerStateBegan 或UIGestureRecogn
我目前正在开发 WatchKit 应用程序,但我目前遇到此给定方法的问题: - (void)application:(UIApplication*)application handleWatchKit
我正在尝试使用 ReactiveCocoa 的 RACSignal 类的间隔方法。以下代码在 1 秒后每秒运行一次。但我希望它每秒都能立即运行。什么是最好的方法? @weakify(self); [[
我有一个简单的问题,但找不到好的解决方案。 我有一个发送字符串的信号,然后是一个 map。 map 将字符串转换为 JSON。 可能会出现字符串格式错误导致JSON解析器解析失败的情况。 [strin
我是 Reactive Cocoa 的新手。我正在尝试通过信号设置按钮启用属性。我有以下代码片段可以正常工作: RACSignal *formValid = [RACSignal
我的 ViewController 包含一个 UISearchBar 并实现了 UISearchBarDelegate 协议(protocol)。我为 searchBartextDidChange:
我也在我的 iOS 中使用 MVVM 范例和 RACSignal。到目前为止,一切进展顺利。但是,我在订阅信号时遇到了问题。在第一次订阅时一切正常。但是,进一步的订阅不会。 代码 在我的 viewMo
我正在尝试使用 react 性 cocoa 进行并发加载,我的实现使用了已弃用的缓冲方法。我如何才能在不损失代码清晰度的情况下更改它? 输入:仅发送一次“下一步”并完成/错误的加载信号数组 期望的结果
我对 ReactiveCocoa 比较陌生,想知道如何将一系列 REST GET 调用链接在一起,以便它们按顺序执行。如果其中一个调用出错,则整个过程将回滚。 所以我正在使用 pod 'AFNetwo
例如: 在一个 Controller 中实现 func sendSuccessOrNot()->RACSignal { // code here } 在另一个 Controller 中,调用那个信号
我目前正在迈出 ReactiveCocoa 的第一步,我经历了一些陡峭的学习曲线来理解原则。 无论如何,这就是我已经想到的。 我将 NSArray 属性绑定(bind)到 RACSignal,以便能够
我的任务是向应用添加一些检测逻辑以跟踪各种 API 调用的延迟。我正在努力想出一种干净、无副作用的方法来向返回 RACSignal(延迟执行 API 调用)的方法添加计时检测。 注意事项 使用 Rea
我正在编写一些通过 websockets 与远程 API 交互的代码。我的数据层负责建立和监控 websocket 连接。它还包含应用程序可以用来对要发送的 websocket 消息进行排队的方法。应
我正在尝试返回一个可以在 Objective-C 代码中使用的 RACSignal,我尝试了各种方法。例如: @objc class func getPosts() -> RACSignal
我正在尝试监听位置更新和错误(通过 CLLocationManagerDelegate),并支持跟踪错误但将它们从最终信号中过滤掉并保持其事件的能力。 当我订阅位置信号时(通过 ReactiveCoc
我是一名优秀的程序员,十分优秀!