在Scala.js中入眠Future

jhe*_*dus 3 future scala.js

是否可以在Scala.js的Future中入睡?

就像是:

Future {
   Thread.sleep(1000)
   println("ready")
}
Run Code Online (Sandbox Code Playgroud)

如果尝试此方法,则会出现异常,说明该sleep方法不存在。

似乎可以在JS中进行睡眠:sleep()的JavaScript版本是什么?即使不可能阻止。

sjr*_*jrd 5

您不能真正停在未来机构的中间,但可以将您的未来注册为“延迟”未来的后续活动,您可以将其定义为:

def delay(milliseconds: Int): Future[Unit] = {
  val p = Promise[Unit]()
  js.timers.setTimeout(milliseconds) {
    p.success(())
  }
  p.future
}
Run Code Online (Sandbox Code Playgroud)

并且您可以将其用作:

val readyLater = for {
  delayed <- delay(1000)
} yield {
  println("ready")
}
Run Code Online (Sandbox Code Playgroud)