在 Scala.js 睡在 Future 里

Sleep inside Future in Scala.js

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

类似于:

Future {
   Thread.sleep(1000)
   println("ready")
}

如果我尝试这样做,我会得到一个异常,提示 sleep 方法不存在。

似乎可以在 JS 中休眠:What is the JavaScript version of sleep()? 尽管无法阻止。

你不能真正停在 future 主体的中间,但你可以将你的 future 注册为 "delay" Future 的后续,你可以将其定义为:

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

然后您可以将其用作:

val readyLater = for {
  delayed <- delay(1000)
} yield {
  println("ready")
}