• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

vue2+typescript使用worker

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

1、安装插件

npm install worker-loader --save-dev

2、配置vue.config.js

module.exports = {
  configureWebpack: {
    module: {
      rules: [
        {
          test: /\.worker\.(c|m)?js$/i,
          use: [
            {
              loader: "worker-loader",
            },
            {
              loader: "babel-loader",
              options: {
                presets: ["@babel/preset-env"],
              },
            },
          ],
        },
      ],
    },
  }
};

3、将worker改造成构造函数,在src目录下新建一个worker-loader.d.ts文件内容如下

declare module "worker-loader!*" {
  // You need to change `Worker`, if you specified a different value for the `workerType` option
  class WebpackWorker extends Worker {
    constructor();
  }

  // Uncomment this if you set the `esModule` option to `false`
  // export = WebpackWorker;
  export default WebpackWorker;
}

4、创建my.worker.ts 文件

 

const ctx: Worker = self as any;
// 监听 message 事件
ctx.addEventListener('message', (res) => {
  console.log('很好收到消息了');
  // 向主线程发送消息
  if (res.data.type === 'ok') {
    ctx.postMessage('你错没?');
  } else {
    throw new Error('error');
  }
}, false);

//// ctx.onmessage = (e) => {
// };

// 监听错误事件
ctx.addEventListener('error', (e) => {
  console.log('error');
});

//// ctx.onerror = (e) => {
//   console.log(e);
// };

export default ctx;

 

5、使用worker

<template>
  <div class="about">
    <h2>Woker 使用</h2>
    <h2>title: {{ title }}</h2>
    <h2>title2: {{ title2 }}</h2>
  </div>
</template>
<script lang="ts">
import Worker from 'worker-loader!./my.worker';
import { Component, Vue } from 'vue-property-decorator';

@Component
export default class About extends Vue {
  public title: string = '';
  public title2: string = '';
  public mounted() {
    const worker = new Worker();
    console.log(worker);

    // 主进程向子进程发送信息:
    worker.postMessage({
      type: 'ok',
    });

    // 主进程接收子进程返回信息:
    worker.onmessage = (res) => {
      this.title = res.data;
      // 关掉进程
      worker.terminate();
    };
    worker.postMessage({
      type: 'no',
    });
    worker.onerror = () => {
      this.title2 = '我错了。';
      // 关掉进程
      worker.terminate();
    };
  }
}
</script>


 参考资料:https://webpack.js.org/loaders/worker-loader/

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap