Skip to content

Instantly share code, notes, and snippets.

@EddiG
Created October 23, 2017 14:02
Show Gist options
  • Save EddiG/19a806789a599549dbed5d862ef80283 to your computer and use it in GitHub Desktop.
Save EddiG/19a806789a599549dbed5d862ef80283 to your computer and use it in GitHub Desktop.
// 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();
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment