funcwork

Run pure function in web worker

Usage no npm install needed!

<script type="module">
  import funcwork from 'https://cdn.skypack.dev/funcwork';
</script>

README

funcwork

🍵 Run pure function in Web Worker easily. Allows add functions to Web Worker dynamically, there are no preset .js files.

Why

This package help you use Web Worker in a human way.

Install

npm i funcwork

Usage

base

import { FuncWork } from 'funcwork';

const fw = new FuncWork();
const add = (a, b) => a + b;
fw.add(add);

// The `add` function will be running in Web Worker.
// So you can do other things in main process.
fw.invoke(add, [1, 1]).then(result => {
  console.log(result); // 2
})

add multiple functions

import { FuncWork } from 'funcwork';

const fw = new FuncWork();
const add = (a, b) => a + b;
function sub(a, b) {
  return a - b;
}
fw.add(add, sub);

invoke

import { FuncWork } from 'funcwork';

const fw = new FuncWork();
const add = (a, b) => a + b;
fw.invoke(add, [1, 1]).then(result => {
  console.log(result); // 2
})

// or
fw.invoke('add', [1, 2]).then(result => {
  console.log(result); // 3
})

// recommended way
(async () => {
 try {
    const result = await fw.invoke('add', [1, 3]);
    console.log(result); // 4
 } catch (err) {
    // It may be an exception thrown by the Web Worker, or the process of function execution
    console.log(err);
 }
})()

destroy

import { FuncWork } from 'funcwork';

const fw = new FuncWork();

// ...

// Destroy Funcwork instance, it will clear all function and terminate Web Worker instance.
fw.destroy()

API

Class

Funcwork

  • Arguments

    • options: Web Worker options, get detail here
  • Returns

    Funcwork instance

  • Usage

    Create Funcwork instance

    import { FuncWork } from 'funcwork';
    
    const fw = new FuncWork();
    // or 
    const fw = new FuncWork({
        credentials: '',
        name: '',
        type: ''
    });
    

Instance Methods

add

  • Arguments

    • { Function }fn
  • Returns

    this

  • Usage

    Add function to Web Worker

    import { FuncWork } from 'funcwork';
    
    const fw = new FuncWork();
    
    function add (a, b) {
        return a + b;
    }
    fw.add(add);
    fw.add(function sub(a, b) { return a - b});
    
    
    // multiple
    const f3 = () => { 
      // ... 
    };
    fw.add(function f1() {}, function f2, f3);
    
    // Chain calls
    fw.add(function f4() {})
       .add(function f5() {});
    

invoke

  • Arguments

    • { string | Function }name
    • { Array } params
  • Returns

    • Promisedata is the result returned after the function is executed
  • Usage

    Call the registered function

    import { FuncWork } from 'funcwork';
    
    const fw = new FuncWork();
    
    function add (a, b) {
        return a + b;
    }
    fw.add(add);
    
    fw.inoke(add, [1, 2]).then(data => {
        console.log(data); // 3
    })
    fw.invoke('add', [1, 3]).then(data => {
        console.log(data); // 4
    })
    

remove

  • Arguments

    • { string | Function }name
  • Returns

  • Usage

    Remove a registered function

    import { FuncWork } from 'funcwork';
    
    const fw = new FuncWork();
    function add (a, b) { return a + b; }
    fw.add(add);
    
    fw.remove('add');
    // or
    fw.remove(add)
    
    fw.invoke(add) // throw new Error('add is not defined in Funcwork.')
    

clear

  • Arguments

  • Returns

  • Usage

    Clear all registered functions

    import { FuncWork } from 'funcwork';
    
    const fw = new FuncWork();
    function add (a, b) { return a + b; }
    fw.add(add);
    
    fw.clear();
    fw.invoke(add) // throw new Error('add is not defined in Funcwork.')
    

list

  • Arguments

  • Returns

  • Usage

    List all registered functions

    import { FuncWork } from 'funcwork';
    
    const fw = new FuncWork();
    
    function add (a, b) { return a + b; }
    function sub(a, b) { return a - b; }
    fw.add(add, sub);
    fw.list(); // "add | sub"
    

destroy

  • Arguments

  • Returns

  • Usage

    Clear all function and terminate Web Worker instance.

    import { FuncWork } from 'funcwork';
    
    const fw = new FuncWork();
    // do something...
    
    fw.destroy();