我的情况是,我有多个API调用,每个调用都需要使用之前调用的数据。
现在假设我使用future进行API调用,并返回第一次调用的响应,我无法从第一次调用的Oncomplete中调用下一个API。
答案 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
语法。它只是编译时间糖,将内部转换为flatMap
和map
和withFilter
方法调用,但它通常更清晰,更容易阅读。
import scala.concurrent.ExecutionContext.Implicits.global
for {
first <- firstApiCall()
second <- secondApiCall(first)
} yield second