[英]HTML5 Web Worker does not respond to message
考虑以下代码:
worker.js
onmessage = function(evt){
postMessage({data:"foo",id:evt.data.id});
};
master.js(嵌入一些HTML)
function startWorker(count){
var running = count;
for(var i = 0; i < count; i++){
console.log("Creating worker " + i);
var worker = new Worker("worker.js");
worker.onmessage = function(event){
console.log("Worker #" + event.data.id + " finished");
worker.terminate();
running--;
if(!running)
console.log("All worker finished");
}
worker.postMessage({id:i});
}
}
startWorker(3);
每当我在Chrome或Firefox中执行此操作时,大多数时候我只会得到以下输出:
创建工作人员0创建工作人员1创建工作人员2工作人员#0已完成工作人员#1已完成
输出中缺少工作程序2,它从不响应该消息。 但是,如果我重试几次,则所有工作人员都会几次响应我的消息。
你知道我的问题是什么吗? 我创建了一个小提琴来测试这种行为。
这里的问题是变量worker
及其如何在onmessage
函数中使用。
该onmessage
函数是异步,而且也没有在特殊范围for
循环,所以worker
变量被覆盖在每次迭代,并且不能在内部使用onmessage
函数,而不是我们可以用this
,像这样
for (var i = 0; i < count; i++) {
log("Creating worker " + i);
var worker = new Worker(url);
worker.onmessage = function (event) {
log("Worker #" + event.data.id + " finished");
this.terminate(); // "this" will be the correct worker
running--;
if (!running) console.log("All worker finished");
}
worker.postMessage({
id: i
});
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.