js线程worker

一个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?

什么鬼_呀你
浏览 1875回答 2
2回答

ruibin

刚仔细看了下你的代码,发现你在worker文件中再次使用worker,这是不可以的,因为Worker是window下面的一个方法。web Worker有很多限制,Web Worker无法访问DOM节点;Web Worker无法访问全局变量或是全局函数;Web Worker无法调用alert()或者confirm之类的函数;Web Worker无法访问window、document之类的浏览器全局变量;所以,你这里要想实现有序调用,可以在主线程onmessage中再新建subworker线程。

ruibin

你这个文件是在哪里打开的?如果本地打开,最好是用相对路径var cal=new Worker('./js/worker2.js')
打开App,查看更多内容
随时随地看视频慕课网APP