Thread.js 776 Bytes
Newer Older
1 2 3 4 5
import {
  NativeModules,
  DeviceEventEmitter,
} from 'react-native';

Travis Nuttall's avatar
Travis Nuttall committed
6
const { ThreadManager } = NativeModules;
7

Travis Nuttall's avatar
Travis Nuttall committed
8
export default class Thread {
9 10 11 12 13
  constructor(jsPath) {
    if (!jsPath || !jsPath.endsWith('.js')) {
      throw new Error("Invalid worker path. Only js files are supported");
    }

Travis Nuttall's avatar
Travis Nuttall committed
14
    this.id = ThreadManager.startThread(jsPath.replace(".js", ""))
15
      .then(id => {
Travis Nuttall's avatar
Travis Nuttall committed
16
        DeviceEventEmitter.addListener(`Thread${id}`, (message) => {
17 18 19 20 21 22 23 24
          !!message && this.onmessage && this.onmessage(message);
        });
        return id;
      })
      .catch(err => { throw new Error(err) });
  }

  postMessage(message) {
Travis Nuttall's avatar
Travis Nuttall committed
25
    this.id.then(id => ThreadManager.postThreadMessage(id, message));
26 27 28
  }

  terminate() {
Travis Nuttall's avatar
Travis Nuttall committed
29
    this.id.then(ThreadManager.stopThread);
30 31
  }
}