javascript - When I call terminate on my web worker what state is it in? -
i have web worker i'm using poll information.
here code starting , stopping web worker:
var eftworker = undefined; that.startworker = function () { if (eftworker === undefined) { eftworker = new worker('../scripts/etel.eftworker.js'); eftworker.addeventlistener('message', function(e) { eftworkerresponsehandler(e.data); }, false); eftworker.addeventlistener('error', function(e) { eftworkererrorresponsehandler(e); }, false); } eftworker.postmessage({ cmd: eftcmdstart }); }; that.stopworker = function () { if (eftworker !== undefined) { eftworker.postmessage({ cmd: eftcmdstop }); eftworker.terminate(); } eftworker = undefined; }; when call terminate on worker, because worker polling there seems backlog of unprocessed postmessage events.
i'm setting web worker "undefined" on initialisation of containing view , on termination of web worker. believe because of latter, unprocessed events shown abort_errors. there intermediate state can use test existence of web worker can allow process outstanding events , therefore avoid errors?
or there different approach might use avoid accumulation of errors after terminate called?
here solution problem.
i'm recording state of worker in separate variable in order can keep alive handle outstanding messages causing errors.
also i'm trapping , discarding errors generated inside worker itself.
var eftworker = undefined; var eftworkerstate = undefined; var workerstatestarted = 'started'; var workerstatestopped = 'stopped'; var startworker = function () { if (eftworker === undefined | eftworkerstate !== workerstatestarted) { eftworker = new worker('/scripts/etel.eftworker.js'); eftworker.addeventlistener('message', function(e) { eftworkerresponsehandler(e.data); }, false); eftworker.addeventlistener('error', function (e) { eftworkererrorresponsehandler(e); }, false); } eftworker.postmessage({ cmd: eftcmdstart }); eftworkerstate = workerstatestarted; }; that.stopworker = function () { if (eftworker !== undefined) { eftworker.postmessage({ cmd: eftcmdstop }); eftworker.terminate(); } eftworkerstate = workerstatestopped; //eftworker = undefined; }; var eftworkerresponsehandler = function (msg) { try { if (eftworkerstate === workerstatestarted) { if (msg != '' && msg !== undefined) { var parser = new domparser(); var xmldoc = parser.parsefromstring(msg, 'text/xml'); var json = $.xmltojson(xmldoc); alterpaymentuiaccordingtoeftworkerstatus(json); } } } catch (exception) { } }; and here's code worker responsible sending status messages.
eftsendgetrequest = function(passedurl) { if (xmlhttpreq === undefined) { xmlhttpreq = new xmlhttprequest(); } try { xmlhttpreq.open("get", passedurl, false); xmlhttpreq.send(); } catch (e) { } return xmlhttpreq.responsetext; };
Comments
Post a Comment