通过异步继续返回Future的更好方法

时间:2018-03-02 18:07:34

标签: scala

v.1.4.0

上面是一个非常简单的片段。返回类型为ratings。如果没有将xlabels的值存储在DataSets中且仍然有def fun = { val a = Future {println("Inside Future"); throw new Exception("Discomfort in the sea has pulled itself upon me"); 5} a onComplete {_ => Thread.sleep(5000); println("Inside map") } a } 但是仍然可以返回Future,是否有更好的方法?

2 个答案:

答案 0 :(得分:3)

andThen可以帮助解决副作用。请注意,即使抛出异常,也会忽略对#Create a range of doses: mm <- data.frame(DOSE = seq(0, max(data$DOSE), length.out = 100)) #Create a new data frame for ggplot using predict and your range of new #doses: fit.ggplot=data.frame(y=predict(fit, newdata=mm),x=mm$DOSE) ggplot(data=data,aes(x=log10(DOSE),y=log(viability)))+geom_point()+ geom_line(data=fit.ggplot,aes(x=log10(x),y=log(y))) 的调用内返回的值。

andThen

答案 1 :(得分:2)

onComplete返回单位,因此如果您特别想使用onComplete,则需要临时变量。或者,使用Scala 2.12,您可以使用transform来执行类似的操作。请注意,您始终需要返回值:

  def fun = {
    Future {
      println("Inside Future")
      throw new Exception("Discomfort in the sea has pulled itself upon me")
      5
    }.transform {
      res =>
        Thread.sleep(5000)
        println("Inside map")
        res
    }
  }

任何Scala版本的替代方案是使用相同的主体进行映射和恢复,但它不会那么优雅。