javascript jquery deferred not working with worker? -


i have following javascript code:

var promises = [];      // entries contains unknown amount of items. sake of     // sample, has five. $.each(entries, function() {     promises.push(doprocessing()); });  return $.when.apply($, promises).done(function() {     alert('success'); }).fail(function() {     alert('failed'); }); 

if doprocessing function is:

function doprocessing() {     var def = $.deferred();      settimeout(function () {         console.log('request completed');         def.resolve();     },2000);      return def.promise(); } // end of doprocessing 

i request completed log 5 times, followed 'success' alert. if change doprocessing method be:

function doprocessing() {     var def = $.deferred();      // worker has message     myworker.onmessage = function(event) {       console.log('worker finished');       def.resolve();       console.log(def);     };      myworker.postmessage({action:'dosomething'});      return def.promise(); } // end of doprocessing 

where worker doing processing , resolving deferred, no longer success alert. 5 worker finished messages, , def object logged out.

i'm not sure i'm doing wrong here. point me in right direction?

i 5 worker finished messages, , def object logged out.

but it's same def object. by

 myworker.onmessage = function(event) {      …  } 

you overwriting .onmessage property, , last listener called - 5 events. instead, like

worker.messages = 0; function doprocessing() {     var def = $.deferred(),         id = worker.messages++;      // worker has message     myworker.addeventlistener("message", function l(event) {         if (event.data.id != id) return; // it's not us!         console.log('worker '+id+' finished');         def.resolve(event.data);         worker.removeeventlistener(l);     });      myworker.postmessage({action:'dosomething', id:id});      return def.promise(); } 

and adapt worker code pass id back.


Comments

Popular posts from this blog

c++ - OpenCV Error: Assertion failed <scn == 3 ::scn == 4> in unknown function, -

php - render data via PDO::FETCH_FUNC vs loop -

The canvas has been tainted by cross-origin data in chrome only -