// fork.js
const { fork } = require('child_process');
const getMessage = () =>
new Promise((resolve, reject) => {
fork('src/child')
.on('message', message => {
resolve(message);
})
.send('start');
setTimeout(() => reject('Timeout'), 5000);
});
(async () => {
try {
const promises = [1, 2, 3, 4, 5, 6, 7].map(() => getMessage());
const messages = await Promise.all(promises);
messages.map(message => console.log(message));
} catch (error) {
console.log(error);
}
})();
// src/child.js
process.on('message', message => {
const payload = {
id: process.pid,
info: {
finish: new Date().toLocaleTimeString(),
},
};
for (let i = 0; i < 1e9; i++) {
// do some work
}
process.send({ type: 'INFO', payload });
process.exit();
});