catsライブラリのtypeclassがここで役立つかもしれません。 Option[Future[Something]]
をFuture[Option[Something]]
に変換するという定型句の世話をすることができます。アンモナイトREPL使用
例:
@ val optionOfFuture: Option[Future[String]] = Some(Future.successful("hello"))
optionOfFuture: Option[Future[String]] = Some([email protected])
我々はTraverse
を使用 ':
$ amm
Loading...
Welcome to the Ammonite Repl 0.7.7
(Scala 2.11.8 Java 1.8.0_101)
@ import $ivy.`org.typelevel::cats-core:0.7.2`
import $ivy.$
まず、いくつかの輸入...
@ import cats.Traverse
import cats.Traverse
@ import cats.implicits._
import cats.implicits._
@ import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.ExecutionContext.Implicits.global
@ import scala.concurrent.Future
import scala.concurrent.Future
をここでは、変換したい事がありますsequence
Option
と0123を切り替える方法:
@ val futureOfOption: Future[Option[String]] = Traverse[Option].sequence(optionOfFuture)
futureOfOption: Future[Option[String]] = Success(Some(hello))
それとも、構文、砂糖バージョンを好む場合:Traverse
が行うことができます他に何の詳細については
@ import cats.syntax.traverse._
import cats.syntax.traverse._
@ val futureOfOption2: Future[Option[String]] = optionOfFuture.sequence
futureOfOption2: Future[Option[String]] = Success(Some(hello))
を、cats documentationを見てみましょう。
モナド変圧器はあなたが探しているものかもしれません。 – mfirry
あなたは 'Option [Future [A]] => Future [Option [A]]がほしいと言っていますが、詳細はあなたが' Option [Option [A]]] => Option [ A] '?だから、それは?あなたは例を挙げることができますか? – Cubic