autoworker

0.4.0 • Public • Published

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.

Package Sidebar

Install

npm i autoworker

Weekly Downloads

3

Version

0.4.0

License

MIT

Unpacked Size

6.22 kB

Total Files

4

Last publish

Collaborators

  • gavinhungry