如何异步执行另一个Future之前的Future

我正在对API进行嵌套调用。最终结果是数千次通话。最终用户希望这样的迭代器:

Iterator[Map[String,String]]

在切换到下一个阶段之前,我不想遍历每个叶子调用。

在下一个状态下,迭代器由另一种方法消耗,该方法将每个Map作为行插入db中。

由于Iterator可能很大,并且可能包含导致失败的不良行,因此提取方法ingestIterator还会返回Future

def ingestIterator(i: Iterator[Map[String,String]]): Seq[CustomFuture[Boolean]]

所以整个事情看起来像

def getStates(url:String): List[String]

def getcounties(states: List[String]): List[String]

def getBlocks(stateCounties: List[String]): Iterator[Map[String,String]]

def getEverything(): Future[Iterator[Map[String,String]]]

但是ingestIterator需要一个迭代器,我试图找出在此处插入异步性的最佳实践是什么。

leikai945 回答:如何异步执行另一个Future之前的Future

如果仅在消耗结果迭代器时才懒惰地计算每个Map[String,String],则您的处理实际上是顺序的,可能不会从期货中获得任何好处。

实际上,您似乎想要并行与反压相结合。 看一下fs2zio-streamsakka-streams之类的流媒体库。

本文链接:https://www.f2er.com/3157724.html

大家都在问