【问题标题】:Avoid repeated http requests on ReactiveCocoa避免在 ReactiveCocoa 上重复 http 请求
【发布时间】:2016-01-26 06:13:36
【问题描述】:

我有一个信号,基本上它所做的就是请求使用 NSRULSession 进行配置。当我执行 subscribeNext 时,它会完美地完成请求,但是第二次不再需要此请求。我该如何避免呢?

【问题讨论】:

  • 能否提供与问题相关的源代码?

标签: ios swift2 reactive-cocoa reactive-cocoa-3


【解决方案1】:

使用属性和其值绑定到该属性的操作。然后仅根据需要触发操作以刷新属性的值。

【讨论】:

    【解决方案2】:

    您的信号在每次订阅时都会完成它的工作,除非您采取明确的措施来防止这种情况发生。听起来您在这里想要的是 replayLast 运算符。该运算符将缓存您的信号的最后发出的值,并在您再次订阅您的信号时发出它,而不是重做初始工作。

    在此处阅读“重播”运算符: http://spin.atomicobject.com/2014/06/29/replay-replaylast-replaylazily/

    【讨论】:

      【解决方案3】:

      一个时间信号可以通过take:操作符发出。您只需要传递一个参数来表示执行信号所需的次数。经过这么多的执行后,此网关将完全关闭,subscribeNext: 块中将不再传递数据。在您的情况下,此金额将等于 1。

      RACSignal *requestConfigurationSignal = ...
      [[requestSignal 
         take:1] 
         subscribeNext:^(id value){
         NSLog(@"Request in progress")
      }]
      

      【讨论】:

      • 听起来他们希望能够多次订阅但只发出一个网络请求。也就是说,他们希望缓存结果。这就是重放操作符有用的地方。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-15
      相关资源
      最近更新 更多