在html5中创建web worker时使用setTimeout()

时间:2015-12-13 18:15:09

标签: javascript html html5 web-worker

我正在关注网络工作者的教程 - http://www.w3schools.com/html/html5_webworkers.asp

我对大多数事情都很清楚,但我不知道使用setTimeout函数的目的是什么,以及postMessage(i)如何将i的值返回到w.onmessage {1}}。

代码 -

var i = 0;

function timedCount() {
    i = i + 1;
    postMessage(i);
    setTimeout("timedCount()",500);
}

timedCount(); 

任何人都可以向我解释这个例子的工作流程吗?

3 个答案:

答案 0 :(得分:3)

setTimeout的目的是在500毫秒后调用timedCount。由于它是递归调用的,因此效果是timedCount每秒调用两次。

另请注意,这样做也是如此:

var i = 0;

function timedCount() {
    i = i + 1;
    postMessage(i);
}

setInterval(timedCount, 500);

答案 1 :(得分:2)

function startWorker() {
    if(typeof(Worker) !== "undefined") {
        if(typeof(w) == "undefined") {
            w = new Worker("demo_workers.js");
        }
        w.onmessage = function(event) {
            document.getElementById("result").innerHTML = event.data;
        };
    } else {
        document.getElementById("result").innerHTML = "Sorry! No Web Worker support.";
    }
}

请注意在w.onmessage

上注册的回叫
  

当web worker发布消息时,事件中的代码   监听器被执行。来自Web worker的数据存储在   event.data。

并且魔术由SetTimeout函数播放,该函数使用全局方法Webworker即以500ms的间隔递归地发布计时器值。 PostMessage

可以在此处找到PostMessage功能的完整详细信息

PostMessage Syntax

  

myWorker.postMessage(aMessage,transferList);

<强>参数

<强> aMessage

  

交付给工人的对象;这将在数​​据字段中   该事件已发送至DedicatedWorkerGlobalScope.onmessage   处理程序。这可能是由处理的任何值或JavaScript对象   结构化克隆算法,包括循环引用。

transferList可选

  

可转让对象的可选数组,用于转移所有权。如果   对象的所有权被转移,它变得无法使用   (neutered)在它发送的上下文中,它变得可用   只发送给它的工人。

只能传输MessagePort和ArrayBuffer对象。

答案 2 :(得分:1)

根据定义,setTimeout()方法在指定的毫秒数后调用函数或计算表达式。 http://www.w3schools.com/jsref/met_win_settimeout.asp

var i = 0;

function timedCount() {
i = i + 1;
postMessage(i);
setTimeout("timedCount()",500);
}

timedCount();

上面的脚本加载函数timedCount。变量i的初始值为0.遵循等式,i等于1(0 + 1)。然后postMessage显示i的值为1.接下来是setTimeout进来的地方。

setTimeout,根据定义,将在500毫秒间隔后运行脚本。由于在循环中调用函数timeCount,它将以连续循环运行函数,每次运行的间隔为0.5秒。它将以500毫秒的增量1计数并显示i的值。