2 つの先物 (db テーブルに対する 2 つのアクション) があり、変更を保存する前に、両方の先物が正常に終了したかどうかを確認する必要があります。
今、私は最初の未来の中で(依存関係として)2番目の未来を始めていますが、それが最善の選択肢ではないことはわかっています。-comprehension を使用してfor
両方の先物を並行して実行できることはわかっていますが、一方が失敗した場合でも、もう一方が実行されます (まだテストされていません)。
firstFuture.dropColumn(tableName) match {
case Success(_) => secondFuture.deleteEntity(entity)
case Failure(e) => throw new Exception(e.getMessage)
}
// the first future alters a table, drops a column
// the second future deletes a row from another table
この場合、最初のフューチャーが正常に実行された場合、2 番目のフューチャーは失敗する可能性があります。最初の未来の更新を元に戻したいです。SQL トランザクションと聞いたのですが、そのようなものがあるようですが、どうですか?
val futuresResult = for {
first <- firstFuture.dropColumn(tableName)
second <- secondFuture.deleteEntity(entity)
} yield (first, second)
for
私の場合、これら2つの未来の間に依存関係がなく、並行して実行できるため、理解ははるかに優れていますが、これは問題を解決しません。結果は(成功、成功)または(失敗、成功)になる可能性があります例。