Search code examples
scalafuturefor-comprehension

composed for comprehension in scala


I have a list of tasks in a for-comprehension:

def main = {
    List("en", "es", "de").foreach(c => execAll(c))
} 

def execAll(country: String): Future[Unit] = {
   for {
      _ <- repo.exec1(country)
      _ <- repo.exec2(country)
      _ <- repo.exec3(country)
      _ <- repo.exec4(country)
      _ <- repo.exec5(country)
   } yield ()
}

The problem now is because I need to execute functions exec4 and exec5 only for "en" and "es" countries. I tried to add the functions in a list of futures by condition (if country == "en" don't add it)

val all = for {
      _ <- repo.exec1(country)
      _ <- repo.exec2(country)
      _ <- repo.exec3(country)
} yield ()

val enOrEsOnly = for {
      _ <- repo.exec4(country)
      _ <- repo.exec5(country)
} yield ()

country match {
    case "de" => all
    case other => all + enOrEsOnly // invalid code
}

Can find a solution using for-comprehension here? Or can just use a list of futures here? I don't need their results. thanks

Or I can just use an if to solve it:

if (country != "de") {
   repo.exec4(country)
   repo.exec5(country)
}

Solution

  • What about replace execAll by:

    def execAll(country: String): Future[Unit] = {
       for {
          _ <- repo.exec1(country)
          _ <- repo.exec2(country)
          _ <- repo.exec3(country)
          if country != "de"
          _ <- repo.exec4(country)
          _ <- repo.exec5(country)
       } yield ()
    }