javascript - HTML5 WebWorkers, timed function -
i trying webworker count 100 , update div value of i, div updates straight 100 , seems ignore interval....
javascript (webworker file):
self.addeventlistener('message', function (e) { switch (e.data) { case 'hi worker': postmessage('hi boss'); break case 'count 100': var i; (i = 0; < 100; i++) { setinterval(postmessage(i + 1), 1000); } break; default: self.postmessage("not sure how that"); } }, false); main file:
<script> var worker = new worker('worker.js'); worker.addeventlistener('message', function (e) { console.log("worker said: " + "'" + e.data + "'"); document.getelementbyid("workercomms").textcontent = "worker said: " + e.data; }, false); </script> </head> <body> <button onclick="worker.postmessage('hi worker');return false;">say 'hi worker'</button> <button onclick="worker.postmessage('count 100');return false;">count 100</button> <div id="workercomms">things workers say...</div>
setinterval(postmessage(i + 1), 1000); calls postmessage(i + 1) , passes return value setinterval, way foo(bar()) calls bar , passes return value foo.
instead:
you want pass function reference
setintervalyou want use
settimeout, notsetintervalyou want vary timeout, because otherwise they'll happen stacked on top of each other 1 second later
something like:
for (i = 1; <= 100; i++) { settimeout(postmessage.bind(window, i), 1000 * i); } would it. schedules 100 timers, @ one-second intervals. uses postmessage.bind(window, i) create function that, when called, postmessage this set window , passing in i first argument. did i 1 100 rather 0 99 avoid having add 1 in both places used it.
alternately, ditch for loop entirely , use setinterval or chained series of settimeout. here's setinterval:
var = 0; var timer = setinterval(function() { postmessage(++i); if (i >= 100) { clearinterval(timer); } }, 1000);
Comments
Post a Comment