Как проверить, не сработали ли некоторые фьючерсы в коллекции - PullRequest
0 голосов
/ 17 февраля 2020

Я использовал traverse, чтобы выполнить коллекцию фьючерсов следующим образом:

val result: Future[List[Either[Error, Int]]] = Future.traverse(urls)(foo(_))

Я получаю Future[List[Either[Error, Int]]]. Как я могу проверить, что одно из этих фьючерсов привело к ошибке?

Я пытался сделать это, но я думаю, что это неправильно, потому что я читаю, что вы не можете заменить переменные на фьючерсы?

    val check: Future[Boolean] = result.map{
      fut => fut.exists(c => c.isLeft)
    }

    check.map{
      b => b match {
        case true => // do something
        case false => // do something
      }
    }

1 Ответ

2 голосов
/ 17 февраля 2020

Вы можете преобразовать result в список ошибок, таких как:

val errors: Future[List[Error]] = result.map(_.collect{ case Left(err) => err })

Затем можно использовать Await.result для извлечения этих значений ошибок, но это почти всегда плохая идея потому что он блокирует текущий поток.

Лучше спросить: «Что я хочу сделать, когда Future завершится, но вернет ошибки?». Затем реализуйте это поведение в map или foreach в errors Future.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...