SCALA:我将如何在未来的回调中启动另一个未来的电话

时间:2017-03-07 10:43:05

标签: scala

我的情况是,我有多个API调用,每个调用都需要使用之前调用的数据。

现在假设我使用future进行API调用,并返回第一次调用的响应,我无法从第一次调用的Oncomplete中调用下一个API。

2 个答案:

答案 0 :(得分:4)

您可以将期货与flatMap功能链接

def firstApiCall(): Future[FirstRes]

def secondApiCall(firstRes: FirstRes): Future[SecondRes]

def combinedCall()(implicit ec: ExecutionContext): Future[SecondRes] = firstApiCall.flatMap(res => secondApiCall(res))

答案 1 :(得分:2)

您可以使用flatMap或更清晰的替代方法对一堆未来进行排序,即使用for yield语法。它只是编译时间糖,将内部转换为flatMapmapwithFilter方法调用,但它通常更清晰,更容易阅读。

import scala.concurrent.ExecutionContext.Implicits.global

for {
  first <- firstApiCall()
  second <- secondApiCall(first)
} yield second