worker.js 776 Bytes
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
import {
  NativeModules,
  DeviceEventEmitter,
} from 'react-native';

const { WorkerManager } = NativeModules;

export default class Worker {
  constructor(jsPath) {
    if (!jsPath || !jsPath.endsWith('.js')) {
      throw new Error("Invalid worker path. Only js files are supported");
    }

    this.id = WorkerManager.startWorker(jsPath.replace(".js", ""))
      .then(id => {
        DeviceEventEmitter.addListener(`Worker${id}`, (message) => {
          !!message && this.onmessage && this.onmessage(message);
        });
        return id;
      })
      .catch(err => { throw new Error(err) });
  }

  postMessage(message) {
    this.id.then(id => WorkerManager.postWorkerMessage(id, message));
  }

  terminate() {
    this.id.then(WorkerManager.stopWorker);
  }
}