Scala.js: 如何在 Webworker 中访问 self

Scala.js: How to access self in a Webworker

所以我有一个网络工作者:

package pWorker    
import scala.scalajs.js._
import org.scalajs.dom._

object WorkScript extends scala.scalajs.js.JSApp
{
  def main(): Unit =  
  {
    val x = 4
    val y = 8
    val z = x + y
    println("Worker x + y =" -- z.toString)      
  }
}

当从主 JavaScript 线程启动时,worker 会根据需要打印到控制台。但我找不到调用等价物的方法:

self.addEventListener('message', function(e) {}
self.postMessage(e.data);

我会从直接 Javascript 文件调用。

与 Scala.js 一样,如果找不到 JavaScript API 的现有类型,您可以选择使用动态类型或编写自己的类型。

动态类型

val self = js.Dynamic.global
self.addEventListener("message", { (e: dom.MessageEvent) =>
  ...
}
self.postMessage(someData)

静态类型

@js.native
object WorkerGlobal extends js.GlobalScope {
  def addEventListener(`type`: String, f: js.Function): Unit = js.native
  def postMessage(data: js.Any): Unit = js.native
}

WorkerGlobal.addEventListener("message", { (e: dom.MessageEvent) =>
  ...
}
WorkerGlobal.postMessage(someData)