Documentation/Source example
Example source
samples/worker/01. Basic Messaging.js
Referenced by:Worker
'use strict';
// Worker sample 1: Basic Messaging
// Demonstrates: Worker lifecycle, structured-clone messages, message/error handlers and shutdown.
// Why a Worker: this is the smallest complete pattern used by the larger samples.
const workerSource = String.raw`
'use strict';
onmessage = function (event) {
const values = event.data.values;
const doubled = values.map(value => value * 2);
postMessage({
input: values,
output: doubled,
workerName: self.name
});
// The current message task is allowed to finish, then this Worker exits.
close();
};
onmessageerror = function (event) {
console.log('Worker could not reconstruct an incoming message.');
console.log('Direction: ' + event.direction);
console.log('Reason: ' + (event.errorMessage || '(no diagnostic text)'));
};
`;
const worker = new Worker(workerSource, 'basic-messaging');
worker.onmessage = function (event) {
console.log(JSON.stringify(event.data));
};
worker.onmessageerror = function (event) {
console.log('Panel could not reconstruct a Worker message.');
console.log(`Direction: ${event.direction}`);
console.log(`Reason: ${event.errorMessage || '(no diagnostic text)'}`);
};
worker.onerror = function (event) {
console.log(`Worker error: ${event.message}`);
};
worker.postMessage({ values: [1, 2, 3, 4] });
function on_script_unload() {
// Explicit termination is optional on panel unload: JSplitter automatically
// terminates Workers still owned by the panel. Calling terminate() here is also
// safe, including after this sample Worker has already called close().
worker.terminate();
}