
funthreads
Additional layer for Node.js "worker_threads" module.
Library provides a function, which takes a callback as an argument, runs it in a separate thread and returns a Promise.
Inside callback you can return a Promise or plain value(i.e. object, string and etc...).
Installation
Using npm:
$ npm i --save funthreads
Using yarn:
$ yarn add funthreads
Example
Make sure you're using Node.js >= v10.5.0
In case if you use an old version of node, where the worker-threads
module is in experimental mode, then add --experimental-worker
flag when you run project(details: worker-threads).
$ node --experimental-worker index.js
Example basic/index.js:
import { runOnThread } from 'funthreads';
runOnThread(() => 2 ** 10))
.then((num) => {
console.log(`Result: ${num}`);
})
.catch((err) => {
console.error(err);
});
All examples:
API
Thread.run()
Parameters
(Function): Returns Promise, you can use async/await
or just then/catch
to get value.
(object/array or primitive value): You can send custom data which will be used in a thread.
You can access to this data using global.threadData
in function.
Returns
(Promise): Returns Promise, you can use async/await
or just then/catch
to get value.
Important
You can't accesss to any data outside of function, if you need to use a module, you should
require it in a callback. The only way to accesss data in a callback from outside is the useage
of second parameter. Closures will not work here.
Example
Work with FileSystem index.js:
import { runOnThread } from 'funthreads';
const customData = {
fileName: 'test.txt',
};
runOnThread(async () => {
const fs = require('fs');
const fsPromises = fs.promises;
const { fileName } = global.threadData;
await fsPromises.writeFile(fileName, '');
return true;
}, customData)
.then((res) => {
console.log(`Success: ${res}`);
})
.catch((err) => {
console.error(err);
});
$ node index.js