使用RxSwift创建“反应式” API

尼科

我将脚趾插入RxSwift,并想为我的常规API调用之一创建“流API”。

我的想法是进行常规调用(该调用已经使用了可观察对象,没有任何问题),并让计时器触发了此类调用,并在相同的可观察对象上发送结果,因此视图控制器可以自动更新,因此无需进行更新(后面是伪代码) :

func getLocations() -> Observable<[Location]> {
  return Observable<[Location]>.create {
    sink in
    NSURLSession.sharedSession.rx_JSON(API.locationsRequest).map {
       json in
       return json.flatMap { Location($0) }
    }
  }
}

我希望这种情况发生(后面是伪代码):

func getLocations(interval: NSTimeInterval) -> Observable<[Location]> {
  return Observable<[Location]>.create {
    sink in
    NSTimer(interval) {
      NSURLSession.sharedSession.rx_JSON(API.locationsRequest).map {
        json in
        sink.onNext(json.flatMap { Location($0) })
      }
    }
  }
}

我尝试的最后一件事是将NSTimer添加到混合中,但是我无法弄清楚如何获取对接收器的引用,并将其传递给计时器调用的方法,以实际将事件沿管道发送出去,因为计时器的处理程序必须位于独立方法上。我尝试从BlocksKit抛出块计时器扩展,但是计时器每秒触发一次,而不是按指定的间隔触发,这违背了目的。

我也读过关于Interval操作员的信息,但是我不确定这是正确的方法。

关于如何正确解决问题的任何指示?

最终目标是仅在上一个呼叫完成(成功或失败)之后重新启动计时器。

盖·卡隆

您应该执行类似以下代码的操作:

  func getLocations(interval: NSTimeInterval) -> Observable<[CLLocation]> {

    return Observable<[CLLocation]>.create { observer in

      let interval = 20.0

      let getLocationDisposable = Observable<Int64>.interval(interval, scheduler: MainScheduler.instance)
        .subscribe { (e: Event<Int64>) in

          NSURLSession.sharedSession.rx_JSON(API.locationsRequest).map {
            json in
            observer.onNext(json.flatMap { Location($0) })
          }
      }

      return AnonymousDisposable {
        getLocationDisposable.dispose()
      }

    }
  }

上面的代码每20秒触发API.locationsRequest并将结果发送到相同的可观察对象上,请注意,必须在处理maim可观察对象时处置Interval。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Vue 3的Composition API中的反应式嵌套对象上使用.value?

来自分类Dev

我如何使用带有Mutiny API的Quarkus反应式mysql客户端在事务中插入并获取mysql中最后插入的id

来自分类Dev

无法创建嵌套的反应式表单

来自分类Dev

使用RxScala进行反应式编程

来自分类Dev

如何创建反应式和非反应式流星模板?

来自分类Dev

访问从反应式函数创建的数据以在Shiny中定义反应式值

来自分类Dev

如何在Shiny应用程序中使用ggplot创建反应式图

来自分类Dev

如何使用以元组为参数的变量创建反应式绑定

来自分类Dev

如何创建反应式全屏模式,该模式将使用选项卡覆盖SafeAreaView?

来自分类Dev

R Shiny - 如何使用函数 dateRangeInput 和 selectInput 创建反应式条形图

来自分类Dev

Flexdashboard:基于下拉输入创建反应式数据框

来自分类Dev

使用反应式扩展程序-这是异步的吗?

来自分类Dev

使用反应式扩展动态串联序列

来自分类Dev

使用CurrencyPipe转换反应式表单的输入

来自分类Dev

流星:使用Tracker.Dependency的反应式助手

来自分类Dev

什么是使用过的ExecutorService反应式编程的好处?

来自分类Dev

使用反应式绘图时的R闪亮错误

来自分类Dev

Cassandra DB使用哪个依赖项(反应式)

来自分类Dev

使用反应式过滤输入时出错

来自分类Dev

使用Apollo和Vuejs的反应式查询定义

来自分类Dev

使用CurrencyPipe转换反应式表单的输入

来自分类Dev

使用反应式数组对角材料表进行排序

来自分类Dev

使用反应式扩展程序-这是异步的吗?

来自分类Dev

使用Iron Router在Meteor中设置反应式布局

来自分类Dev

使用反应式调用ShinyServer中的函数

来自分类Dev

使用闪亮的反应式应用程序重置输入

来自分类Dev

在反应式语句中使用扫描

来自分类Dev

使用反应式扩展我如何创建一个动态列表,其中包含可以过期的值

来自分类Dev

如何创建一个 Angular 6 反应式表单,其中使用按钮添加和删除表单组

Related 相关文章

  1. 1

    如何在Vue 3的Composition API中的反应式嵌套对象上使用.value?

  2. 2

    我如何使用带有Mutiny API的Quarkus反应式mysql客户端在事务中插入并获取mysql中最后插入的id

  3. 3

    无法创建嵌套的反应式表单

  4. 4

    使用RxScala进行反应式编程

  5. 5

    如何创建反应式和非反应式流星模板?

  6. 6

    访问从反应式函数创建的数据以在Shiny中定义反应式值

  7. 7

    如何在Shiny应用程序中使用ggplot创建反应式图

  8. 8

    如何使用以元组为参数的变量创建反应式绑定

  9. 9

    如何创建反应式全屏模式,该模式将使用选项卡覆盖SafeAreaView?

  10. 10

    R Shiny - 如何使用函数 dateRangeInput 和 selectInput 创建反应式条形图

  11. 11

    Flexdashboard:基于下拉输入创建反应式数据框

  12. 12

    使用反应式扩展程序-这是异步的吗?

  13. 13

    使用反应式扩展动态串联序列

  14. 14

    使用CurrencyPipe转换反应式表单的输入

  15. 15

    流星:使用Tracker.Dependency的反应式助手

  16. 16

    什么是使用过的ExecutorService反应式编程的好处?

  17. 17

    使用反应式绘图时的R闪亮错误

  18. 18

    Cassandra DB使用哪个依赖项(反应式)

  19. 19

    使用反应式过滤输入时出错

  20. 20

    使用Apollo和Vuejs的反应式查询定义

  21. 21

    使用CurrencyPipe转换反应式表单的输入

  22. 22

    使用反应式数组对角材料表进行排序

  23. 23

    使用反应式扩展程序-这是异步的吗?

  24. 24

    使用Iron Router在Meteor中设置反应式布局

  25. 25

    使用反应式调用ShinyServer中的函数

  26. 26

    使用闪亮的反应式应用程序重置输入

  27. 27

    在反应式语句中使用扫描

  28. 28

    使用反应式扩展我如何创建一个动态列表,其中包含可以过期的值

  29. 29

    如何创建一个 Angular 6 反应式表单,其中使用按钮添加和删除表单组

热门标签

归档