Я делаю вложенные вызовы API. Конечный результат - несколько тысяч звонков. Конечный потребитель этого ожидает итератор, подобный следующему:
Iterator[Map[String,String]]
Я не хочу перебирать каждый листовой вызов перед передачей на следующий этап.
В следующем состоянии итератор используется другим методом, который вставляет каждый Map
как строку в БД.
Поскольку 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
хочет итератори я пытаюсь выяснить, какова наилучшая практика для вставки асинхронности в середину здесь.