代码之家  ›  专栏  ›  技术社区  ›  Suma

在scala.js中轮询未来

  •  1
  • Suma  · 技术社区  · 6 年前

    我有一个跨平台的JVM/JS应用程序的未来。未来将通过以下方式在JVM中进行调查:

    val load = Future(loadSometing())
    
    if (load.isCompleted) {
      val loaded = Await.result(load, Duration.Inf)
      // now process it
    }
    

    这不能与scala.js一起使用,因为scala.js不实现 Await . 但在我的情况下,我并没有用等待等待来等待,只是为了得到我知道已经存在的结果。我知道一个合适的解决方案是使代码完全异步,并在 Future 处理程序(map或oncomplete),但即使知道它不是正确的方法,也可以 未来 以某种方式在scala.js中对结果进行轮询?

    1 回复  |  直到 6 年前
        1
  •  3
  •   sjrd    6 年前

    使用 Future.value 轮询 Future 不等待/阻止:

    import scala.concurrent.Future
    import scala.concurrent.ExecutionContext.Implicits.global
    
    val f = Future { 42 }
    println(f.value)
    
    js.timers.setTimeout(500) {
      println(f.value)
    }
    

    将打印

    None
    Some(Success(42))
    

    Fiddle here