斯卡拉如何等待,然后副作用完成?

时间:2016-02-13 15:20:18

标签: scala

此代码按预期工作:

val f1 = Future { 
      println("start") 
   }.flatMap { _ =>
      Future { Thread.sleep(100); "done" }
   }.andThen {
      case Success(x) => println(x)
   }
Await.ready(f1, Duration.Inf)

输出是:

start
done

但是这段代码没有:

val f2 = Future {
      println("start")
    }.andThen { case Success(x) =>
      Future { Thread.sleep(100); "done" }.foreach(println)
    }
Await.ready(f2, Duration.Inf)

输出

start

所以我的问题是我应该如何链接一系列回调,如果这些回调也使用期货,那只会执行副作用。对我来说,我的第二个代码块似乎更多"正确"因为副作用包含在回调链的一个步骤中

1 个答案:

答案 0 :(得分:1)

我忘了flatMap调用也可以返回一个包含Unit的Future ...

  val f2 = Future {
     println("start")
  }.flatMap { x =>
     Future { Thread.sleep(100); "done" }.map(println)
  }
  Await.ready(f2, Duration.Inf)