多个JavaScript工作者

时间:2014-11-25 01:38:34

标签: javascript html5 multithreading web-worker worker

好的,所以我正在编写一个代码,我开始工作5个工作人员,他们都会在0-10秒之间随机休眠,然后返回他们睡了多久。当所有工人都完成睡眠时,经理将此输出到html

到目前为止,我已经让我的5名工作人员随机休息,但不知道如何处理对经理的多个回复。 worker.js获取随机数的方法,为该随机数休眠,然后发送它睡了多长时间 manager.js(下)

window.onload = function(){
var w1= new Worker("worker.js");
var w2= new Worker("worker.js");
var w3= new Worker("worker.js");
var w4= new Worker("worker.js");
var w5= new Worker("worker.js");

var worker = [w1,w2, w3, w4, w5]

for (i =0; i < worker.length; i++){

worker[i].postMessage("sleep");

    worker[i].onmessage = function(event) {
         ndate = new Date();
         message = ndate + " Worker says " + event.data;
         document.getElementById("output").innerHTML = message;
         }
}


}

此代码有5个工作人员,但消息是来自最后一个工作人员的消息。所以我的问题是如何在管理器中收集这5条消息,等待所有5条消息然后发送到html?

2 个答案:

答案 0 :(得分:2)

考虑到您对其他答案的回答,这应该有效。

window.onload = function(){

    var w1= new Worker("worker.js");
    var w2= new Worker("worker.js");
    var w3= new Worker("worker.js");
    var w4= new Worker("worker.js");
    var w5= new Worker("worker.js");

    var worker = [w1,w2, w3, w4, w5];

    var wokenUp = 0;
    var allMessages = "";

    for (i =0; i < worker.length; i++){

        worker[i].onmessage = function(event) {
            ndate = new Date();
            message = ndate + " Worker says " + event.data;

            allMessages += message;
            wokenUp++;

            if (wokenUp == worker.length){
                document.getElementById("output").innerHTML = allMessages;
            }
         }

        worker[i].postMessage("sleep");
    }
}

答案 1 :(得分:0)

也许工人正在覆盖文本。尝试追加文字:

document.getElementById("output").innerHTML += message;