为了账号安全,请及时绑定邮箱和手机立即绑定

js线程worker

js线程worker

什么鬼_呀你 2018-02-27 18:37:48
一个worker中创建另一个worker,总是显示后者未定义,怎么回事? html文件 <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="textcml; charset=utf-8"> <title>无标题文档</title> </head> <body> 起始值:<input type="text" id="start" name="start"/><br> 结束值:<input type="text" id="end" name="end"/><br> 个数:<input type="text" id="count"/><br> <input type="button" value="计算" onClick="cal()"/> <table id="show" style="border:2px solid gray;background:#ccc"></table> <script type="text/javascript"> var cal=function(){ var start=parseInt(document.getElementById('start').value); var end=parseInt(document.getElementById('end').value); if(start>=end){ return; } var cal=new Worker('js/worker2.js');//使用worker来启动多线程     var data={start:start,end:end,count:count}; cal.postMessage(JSON.stringify(data)); cal.onmessage=function(event){ var table=document.getElementById('show'); table.innerHTML=''; var result=event.data; var nums=result.split(','); var COLS_NUM=8; for(var i=0;i<=(nums.length-1)/COLS_NUM;i++){ var row=table.insertRow(i); for(var j=0;j<COLS_NUM&&j*COLS_NUM+j<nums.length-1;j++){ row.insertCel(j).innerHTML=nums[i*COLS_NUM+j]; } } }        }; </script> </body> <html> js文件--worker2.js onmessage=function(event){ var data=JSON.parse(event.data);//将数据提取出来 var start=data.start; var end=data.end; var count=data.count; var result=''; search: for(var n=start;n<=end;n++){ for(var i=2;i<=Math.sqrt(n);i++){ if(n%i==0)continue search; } result+=(n+',');//搜集质数 } var sub=new Worker('subworker.js');//再次启动worker线程 var info={result:result,count:count}; sub.postMessage(info);//把要处理的数据传入启动线程中 sub.onmessage=function(event){ //发送消息,将会触发前台JavaScript脚本中worker对象的onmessage方法 postMessage(event.data); } } js文件--subworker.js onmessage=function(event){ var data=JSON.parse(event.data);//将数据提取出来 var start=data.start; var end=data.end; var count=data.count; var result=''; search: for(var n=start;n<=end;n++){ for(var i=2;i<=Math.sqrt(n);i++){ if(n%i==0)continue search; } result+=(n+',');//搜集质数 } var sub=new Worker('subworker.js');//再次启动worker线程 var info={result:result,count:count}; sub.postMessage(info);//把要处理的数据传入启动线程中 sub.onmessage=function(event){ //发送消息,将会触发前台JavaScript脚本中worker对象的onmessage方法 postMessage(event.data); } } =========================== 请教一下,那里有错误,总是在subworker.js15中显示Worker is not defined?
查看完整描述

2 回答

已采纳
?
ruibin

TA贡献358条经验 获得超213个赞

刚仔细看了下你的代码,发现你在worker文件中再次使用worker,这是不可以的,因为Worker是window下面的一个方法。web Worker有很多限制,

Web Worker无法访问DOM节点;

Web Worker无法访问全局变量或是全局函数;

Web Worker无法调用alert()或者confirm之类的函数;

Web Worker无法访问window、document之类的浏览器全局变量;

所以,你这里要想实现有序调用,可以在主线程onmessage中再新建subworker线程。

查看完整回答
反对 回复 2018-03-01
?
ruibin

TA贡献358条经验 获得超213个赞

你这个文件是在哪里打开的?如果本地打开,最好是用相对路径var cal=new Worker('./js/worker2.js')

查看完整回答
反对 回复 2018-03-01
  • 2 回答
  • 0 关注
  • 1861 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信