mirror of
https://github.com/nodejs/node.git
synced 2025-05-03 09:52:21 +00:00

These APIs allow arbitrary, cloneable JavaScript values to be set and passed to all new Worker instances spawned from the current context. It is similar to `workerData` except that environment data is set independently of the `new Worker()` constructor, and the the value is passed automatically to all new Workers. This is a *partial* fix of https://github.com/nodejs/node/issues/30992 but does not implement a complete fix. Signed-off-by: James M Snell <jasnell@gmail.com> PR-URL: https://github.com/nodejs/node/pull/37486 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Gireesh Punathil <gpunathi@in.ibm.com> Reviewed-By: Darshan Sen <raisinten@gmail.com>
34 lines
902 B
JavaScript
34 lines
902 B
JavaScript
'use strict';
|
|
|
|
require('../common');
|
|
const {
|
|
Worker,
|
|
getEnvironmentData,
|
|
setEnvironmentData,
|
|
threadId,
|
|
} = require('worker_threads');
|
|
|
|
const {
|
|
deepStrictEqual,
|
|
strictEqual,
|
|
} = require('assert');
|
|
|
|
if (!process.env.HAS_STARTED_WORKER) {
|
|
process.env.HAS_STARTED_WORKER = 1;
|
|
setEnvironmentData('foo', 'bar');
|
|
setEnvironmentData('hello', { value: 'world' });
|
|
setEnvironmentData(1, 2);
|
|
strictEqual(getEnvironmentData(1), 2);
|
|
setEnvironmentData(1); // Delete it, key won't show up in the worker.
|
|
new Worker(__filename);
|
|
setEnvironmentData('hello'); // Delete it. Has no impact on the worker.
|
|
} else {
|
|
strictEqual(getEnvironmentData('foo'), 'bar');
|
|
deepStrictEqual(getEnvironmentData('hello'), { value: 'world' });
|
|
strictEqual(getEnvironmentData(1), undefined);
|
|
|
|
// Recurse to make sure the environment data is inherited
|
|
if (threadId <= 2)
|
|
new Worker(__filename);
|
|
}
|