如何在 Scala.js 中创建 webworker 代码

Ric*_*ver 4 scala.js

如何使用 Scala.js 为 Web Worker 创建代码?查看文档,一切似乎都生成 JavaScript 函数,而不是顶级 JavaScript。新的 Worker 构造函数似乎需要顶级 Javascript,而不是文件中的函数。所以在我的 Scala.js 代码中我有:

var myWorker = new Worker("worker.js");
myWorker.onmessage = (e: scala.scalajs.js.Any) =>
{
  val e1 = e.asInstanceOf[MessageEvent]
  println("Worker message recieved:" -- e1.data.toString)
}
myWorker.postMessage("")
Run Code Online (Sandbox Code Playgroud)

在文件worker.js中我有

self.postMessage("from webworker");
Run Code Online (Sandbox Code Playgroud)

该消息将按预期被拾取并显示在 Web 控制台中。

sjr*_*jrd 5

根据设计,Scala.js 确实只会生成非顶级代码。但是,您可以使用 sbt 设置在生成的 .js 文件的开头和/或结尾添加一些任意 JavaScript 代码scalaJSOutputWrapper

scalaJSOutputWrapper := ("", "example.WorkerMainObject().main();")
Run Code Online (Sandbox Code Playgroud)

这将导致生成的 .js 文件具有指定的顶级语句。

另请参阅/sf/answers/2433515941/