尋找最好的方式來編寫需要一個接一個地運行異步的函數鏈。鑑於這兩個選項:帶期貨的斯卡拉風格
選項1
def operation1(): Unit = {...}
def operation2(): Unit = {...}
def foo(): Future[Unit] =
Future {
operation1()
operation2()
} onComplete {case _ => println("done!")}
選項2
def operation1(): Future[Unit] = {...}
def operation2(): Future[Unit] = {...}
def foo(): Future[Unit] = {
operation1()
.flatMap {case _ => operation2() }
.onComplete {case _ => println("done!")}
}
- 是否有一個比其他任何優點/缺點?
- 我相信選項1將在同一後臺線程上運行這兩個函數。選項2也是這種情況嗎?
- 這有什麼好的做法嗎?
另一個問題,因爲這個功能:
def foo: Future[A]
如果我想要的結果轉換爲單位,這是做到這一點的最好辦法:
foo map { _ =>() }
謝謝!