私は2つのメソッドを持っていて、Future [String [T]]のどちらにも返しています。私はScala 2.12を使用しています。例えばScala 2.12 FutureとEitherの組み合わせ(バイアスされたバージョン)
、
機能は将来のいずれかの組み合わせを返さない場合は、私は単に理解のために、次のように行うことができます。
def convert(a, b) = ???
def callA(): Future[A] = ???
def callB(a: A): Future[B] = ???
def chain: Future[C] = for {
a <- callA
b <- callB(a)
} yield convert(a, b)
ただし、次の構文を使用してエラーをキャプチャし、最終結果に伝播したいと考えています。それを達成するための最善の方法は何ですか?また、callBまたはcallB1を使用する必要がありますか?
def convert(a, b): Future[Either[String, C]] = ???
def callA(): Future[Either[String, A]] = ???
def callB(a: A): Future[Either[String, B]] = ??? or
def callB1(eithera: Either[String, A]): Future[Either[String, B]] = ???
catsトランスフォームモナドを使用すると、これを簡略化できます。ようこそ私に標準的なlibとcatの両方を使用するためのソリューションを与えるために。
あなたは、単に 'Either'を使用している場合私が想定している 'String'を返す' Left'はエラーを含むテキストメッセージです。 'Success'と' Failure'を 'Future'に組み込んでみませんか? – Yaneeve
'cats.'や' scalaz'から 'EitherT'を見てみたいと思うかもしれません。 – jilen
@ Yaneeve私はただ簡単にしたいのですが、実際にはカスタマイズされたエラーオブジェクトです。 – ttt