尽管使用了setTimeout,Web工作者之后只返回一条消息而后面没有消息

时间:2014-06-19 01:35:18

标签: jquery html5

我编写了一些应该从外部js文件(workers_demo.js)接收Web worker消息并将其放在输出标记之间的代码。 javascript使得在点击按钮时接收第一消息并且每秒接收消息(因此标签之间的html每秒递增1)。但是,问题是数字增加到1但在此之后不会继续增加。以下是主文件:

<!DOCTYPE html>
<html>
<head>
    <script type="text/javascript" src= "jquery-2.1.1.js"></script>
    <script type="text/javascript">
        $(document).ready(function(){
            if(typeof(Worker) !== "undefined"){
                var w;
                $("button#start").click(function(){
                    if(typeof(w) == "undefined") {
                        w = new Worker("workers_demo.js");
                    } 
                    w.onmessage = function(event){
                        console.log("I have received a message"); 
                        $("output#number").html(event.data);
                    }
                });
                $("button#stop").click(function(){
                    w.terminate();
                });
            }else{
                //fallback code
                $("output#number").html("Sorry no web workers.");
            }
        });
    </script>
</head>
<body>
    <output id="number"></output>
    <button id = "start">Start Counting</button>
    <button id = "stop">Stop Counting</button>
</body>
</html>

上面代码中提到的web worker文件:

var output_number = 0;
function increment_numbers() {
output_number++;
postMessage(output_number); 
setTimeout("increment_numbers",1000);
}
increment_numbers();  

是什么导致数字第一次增加而不是随后增加?

1 个答案:

答案 0 :(得分:1)

我已在评论中说过这一点,但我会回答它,以便人们知道问题有答案:

setTimeout("increment_numbers",1000);

应该是

setTimeout(increment_numbers,1000); //no quotes around the function name