React + ts + Web worker

1,422 阅读1分钟

worker.js

export default class WebWorker {
  constructor(worker: WebWorker) {
    let code = worker.toString();
    code = code.substring(code.indexOf('{') + 1, code.lastIndexOf('}'));

    const blob = new Blob([code],{type: 'text/javascript'});

    return new Worker(URL.createObjectURL(blob));
  }

}

demo.worker.js

import WebWorker from "./work";

export const MyWorker = () => {
  function workerCode(this: any){

    this.onmessage = function (e:MessageEvent){
      const {a,b} = e.data;
      this.postMessage({sum: a + b});
    }

  }

  const myWorker = new WebWorker(workerCode);

  return myWorker;
}

使用:

const worker = MyWorker();

worker.postMessage({
  a:1,
  b:2
});

worker.onmessage = (m:any) =>{
  console.log("msg from worker: ",m.data); // 3
};

参考: blog.csdn.net/weixin_4247…