我正在关注网络工作者的教程 - 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();
任何人都可以向我解释这个例子的工作流程吗?
答案 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功能的完整详细信息
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的值。