Skip to content

gavinhungry/autoworker

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 

Repository files navigation

autoworker

Web Workers the Easy Way (TM).

No dependencies, less than 700 bytes when minified and gzipped.

Define workers inline or from a separate file, and work with promises to get the results.

Installation

ES6 Module

import AutoWorker from 'autoworker';

Browserify

$ browserify autoworker.js --standalone AutoWorker -o autoworker-browser.js

Usage

Single method

If only a single method is provided, it is exposed on the instance as run.

let worker = new AutoWorker((a, b, c) => {
  console.log('Calculating in a different thread!');

  return a + b + c;
});

await worker.run(5, 10, 15); // 30

Multiple methods

Note: Multiple methods on a single AutoWorker share the same Worker thread, so there is no concurrency (nor is there any concurrency for multiple calls to the same method).

let worker = new AutoWorker({
  // destructure arguments from a single object
  sum: ({ a, b, c }) => a + b + c,

  // methods can be async as needed
  asyncProduct: async (a, b, c) => a * b * c
});

await worker.sum({ a: 1, b: 2, c: 3 }); // 6
await worker.asyncProduct(2, 4, 8); // 64

Errors

When errors are caught while running methods, the promise is rejected:

let worker = new AutoWorker({
  throws: () => { throw new Error('OHNO'); }
});

try {
  await worker.throws();
} catch(err) {
  // Error: OHNO
}

Separate files

Since workers execute in a different thread, it can be confusing to see their definitions inline. To keep your workers in separate files:

sum.js:

export default (a, b, c) => a + b + c;
import sum from './sum.js';
let worker = new AutoWorker(sum);

License

This software is released under the terms of the MIT license. See LICENSE.