以功能性方式分页的API请求(基于限制/偏移的分页)

时间:2018-10-22 17:32:35

标签: scala

如何以功能方式执行以下逻辑?

  1. 从API检索字符串列表作为Future
  2. 打印字符串
  3. 重复API调用(第1步),但传递一个offset参数,其中offset是字符串列表的长度。

是否可以通过理解来做到这一点?

  

注意:该代码在第一次迭代后失败。我知道为什么不这样做(大多数逻辑发生在Future的.map内部。while循环独立于期货的内容进行迭代。),但我无法提出解决方案。

var offset = 0
breakable {
  while (offset < 100) {
    println(s"Loop Start. Offset = $offset")
    val eventualResponse: Future[Either[String, List[String]]] = callPaginatedApi(offset = offset)

    eventualResponse.map {
      case Right(items) =>
        println(items.mkString(", "))
        offset += items.size
      case Left(e) =>
        println("Parsing of Response failed.", e)
        break
    }.recover {
      println("Api call failed.")
      break
    }
  }
}

输出:

Loop Start. Offset = 0
Api call failed.
String Number One, String Number Two

我有一个工作版本,其中Await是API调用的Future,但是我想重写它,因为我需要更高级的错误处理。

0 个答案:

没有答案