在 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))
我在跨平台 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))