ScalaJS中如何在n毫秒后触发事件?

19

可以使用ScalaJS DOM并采用以下方法吗?

org.scalajs.dom.setTimeout( () => {
  // Work
}, 1000)

在ScalaJS的上下文中,是否有另一种或更好的方法?

2个回答

32

从Scala.js 0.6.0开始,有一种更标准、更符合Scala语言习惯的方法来实现这个:

import scala.scalajs.js.timers._

setTimeout(1000) { // note the absence of () =>
  // work
}

请查看timers的ScalaDoc文档


鉴于该代码不应在浏览器中运行,这似乎是正确的。 - Marius K
1
@MariusK 你是什么意思?我回答中的代码可以在浏览器、Node.js以及几乎所有其他奇怪的JavaScript环境(如electron等)中运行。 - sjrd
啊,我读到了“非标准的,但通常被支持的方法来安排异步执行。”,但在“这个包中的方法适用于Scala.js支持的所有JavaScript虚拟机(目前是Rhino、Node.js和PhantomJS),其中没有列出浏览器。”那么,它不符合标准是什么意思? - Marius K
是因为它直接在全局作用域上调用setTimeout,而不是window.setTimeout吗? - Marius K
1
代码基本上可以在任何地方运行。我还没有见过不支持 setTimeout 的 JavaScript 环境。无需担心:使用它并享受它。 - sjrd

1

没有更好的方法。如果你想的话,可以将其包装在帮助器中并随意命名,但默认情况下就是这样。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接