trasherdk / workerpool

Offload tasks to a pool of workers on node.js and in the browser
Apache License 2.0
1 stars 0 forks source link

Snippet: Minimal async task code example #6

Open trasherdk opened 2 years ago

trasherdk commented 2 years ago

worker.js

const someFailedAsyncTask = async () =>
  new Promise((resolve, reject) => {
    setTimeout(() => reject(new Error('Task failed')), 1000);
  });

workerpool.worker({
  someFailedAsyncTask,
});

workerpoolcontroller.js

import * as path from 'path';
import * as workerpool from 'workerpool';

type ScannerWorker = {
  someFailedAsyncTask: () => string;
};

class WorkerpoolController {
  private workerpool: workerpool.WorkerPool;
  pool: workerpool.Proxy<ScannerWorker>;

  async init() {
    this.workerpool = workerpool.pool(
      path.join(__dirname, 'worker.js')
    );
    this.pool = await this.workerpool.proxy();
  }

  stats() {
    return this.workerpool.stats();
  }
}

export default new WorkerpoolController();

test.js

(async () => {
  await workpoolController.init();
  workpoolController.pool
    .someFailedAsyncTask()
    .then((res) => console.log('task succeed'));
    .catch((err) => console.log('task failed'))
})();

Source: https://github.com/josdejong/workerpool/issues/336#issuecomment-1036265092