0.1.0 • Published 1 year ago

roy-worker-bridge v0.1.0

Weekly downloads
-
License
-
Repository
-
Last release
1 year ago

roy-worker-bridge

Web worker communication brigde. Use this, you can communicate between main thread and worker thread like function calling

Build Setup

# install dependencies
npm install

# start development server for debug
npm run dev

# build in production
npm run build

Sample

in main thread:

import { createWorkerBridge } from 'roy-worker-bridge';

export class MainModule {
  constructor() {}

  async outputInMain() {
    const s = await Promise.resolve('outputInMain');
    console.log('[main]', s);
    return s;
  }

  async outputErrorInMain() {
    const s = await Promise.reject('outputErrorInMain');
    console.log('[main]', s);
    return s;
  }
}

const selfModule = new MainModule();
const bridge = createWorkerBridge(
  selfModule,
  'XXXXXX' // worker js file's url
);

setTimeout(() => {
  bridge
    .outputInWorker()
    .then((v) => {
      console.log('[main]', 'childModule.outputInWorker result: ', v);
    })
    .catch((e) => {
      console.log('[main]', 'childModule.outputInWorker error: ', e);
    });
}, 5000);

setTimeout(() => {
  bridge
    .outputErrorInWorker()
    .then((v) => {
      console.log('[main]', 'childModule.outputErrorInWorker result: ', v);
    })
    .catch((e) => {
      console.log('[main]', 'childModule.outputErrorInWorker error: ', e);
    });
}, 10000);

in worker thread:

import { createWorkerBridge } from 'roy-worker-bridge';

export class ChildModule {
  constructor() {}

  async outputInWorker() {
    const s = await Promise.resolve('outputInWorker');
    console.log('[worker]', s);
    return s;
  }

  async outputErrorInWorker() {
    const s = await Promise.reject(new Error('outputErrorInWorker'));
    console.log('[worker]', s);
    return s;
  }
}

const selfModule = new ChildModule();
const bridge = createWorkerBridge(selfModule);

setTimeout(() => {
  bridge
    .outputInMain()
    .then((v) => {
      console.log('[worker]', 'childModule.outputInMain result: ', v);
    })
    .catch((e) => {
      console.log('[worker]', 'childModule.outputInMain error: ', e);
    });
}, 15000);

setTimeout(() => {
  bridge
    .outputErrorInMain()
    .then((v) => {
      console.log('[worker]', 'childModule.outputErrorInMain result: ', v);
    })
    .catch((e) => {
      console.log('[worker]', 'childModule.outputErrorInMain error: ', e);
    });
}, 20000);
0.1.0

1 year ago