在 Scala.js 中轮询未来

Poll a Future in Scala.js

我在跨平台 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。然而,在我的例子中,我没有使用 Await 等待,只是为了得到我知道已经存在的结果。我知道一个正确的解决方案是使代码完全异步并在 Future 处理程序(映射或 onComplete)中执行处理,但即使知道这不是正确的方法,也可以轮询 Future 结果不知何故 Scala.js?

使用 Future.value 轮询 Future 而不使用 waiting/blocking:

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