Worker
Worker is currently supported as an experimental feature with limitations:
- Can not use script classes (GodotJSScript) in workers
transferable objects
are not supportedonerror
andonready
events are not implemented yet
NOTE: The class name Worker may be changed in future versions for compatibility in different JS engines.
And, Worker scripts may need to have a specific file name suffix or reside in a designated directory.
A Simple Example
// tests/master.ts
// ...
import { Object, Node } from "godot";
import { JSWorker } from "godot.worker";
let worker = new JSWorker("tests/worker");
worker.onmessage = function (m: any) {
console.log("master: get message", m);
};
worker.ontransfer = function (obj: Object) {
console.assert(obj instanceof Node);
this.add_child(obj);
worker.terminate();
};
worker.postMessage("hello");
// tests/worker.ts
import { PackedScene, ResourceLoader } from "godot";
import { JSWorkerParent } from "godot.worker";
if (typeof JSWorkerParent !== "undefined") {
JSWorkerParent.onmessage = function (m: any) {
console.log("worker: get message", m);
JSWorkerParent.postMessage("worker result");
// [EXPERIMENTAL] instantiate a PackedScene in worker thread and transfer it back to master thread
let asset = <PackedScene>ResourceLoader.load("res://background.tscn");
let obj = asset.instantiate();
console.log("[worker] transfering object:", obj);
JSWorkerParent.transfer(obj);
// worker can terminate itself by calling `close()`
// close();
};
}