Skip to content

Instantly share code, notes, and snippets.

@Omkaragrawal
Last active September 29, 2021 23:49
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Omkaragrawal/1a172a0172412af3b264032a15581c2e to your computer and use it in GitHub Desktop.
Save Omkaragrawal/1a172a0172412af3b264032a15581c2e to your computer and use it in GitHub Desktop.

for better understanding, I am showcasing a file downloader as worker.js



const {
Worker,
isMainThread,
parentPort,
workerData
} = require('worker_threads');
const workerPath = './worker.js'
const workerCreator = (...sendData) => {
return new Promise((resolve, reject) => {
const worker = new Worker(workerPath, {
workerData: sendData,
});
worker.on('message', message => {
if (message === true) {
worker.terminate();
resolve(true);
} else {
console.log(message)
}
});
worker.on('error', err => {
worker.terminate();
reject(err);
});
worker.on('exit', code => {
worker.terminate();
if (code !== 0) reject(new Error(`Worker stopped with exit code ${code}`));
});
})
}
workerArray = Array(2)
//if (isMainThread) {
let completeData = [
["URL", "FILE_NAME"],
["URL", "FILE_NAME"],
["URL", "FILE_NAME"]
];
Promise.all(completeData.map((fileUnit, i) => {
return workerCreator(fileUnit[0], 'dir/' + fileUnit[1], i.toString() + ".file");
)).then(success => {
console.log("Promise.all Successful");
console.log(success);
}).catch(err => {
console.log("\n\n\nError returned");
console.log(err);
});
//}
const { workerData, parentPort } = require('worker_threads')
const axios = require('axios');
const fs = require('fs');
const data = workerData;
console.log("\n\nINSIDE OF WORKER THREAD");
// console.log(data);
(async (link = data[0], dir = data[1], file = data[2]) => {
try{
if(!fs.existsSync(dir + "/" + file)) {
const {
data
} = await axios.get(link, {
responseType: "stream"
});
fs.mkdirSync(dir, {
recursive: true
}, err => {
console.log(err);
});
data.pipe(fs.createWriteStream(dir + "/" + file));
console.log("Download Complete");
parentPort.postMessage(JSON.stringify(true))
} else {
console.log("Skipping Download of:\t" + file + "\n")
}
} catch(err) {
console.log(err)
}
})()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment