Trying to get image in base64 from web-worker. All is fine, except worker is replying several times to .onmessage
event:
main.js part:
var worker = new Worker( 'js/ww.js' );
worker.onmessage = function(e) {
console.log( e );
};
worker.postMessage( { url: '/api/aerial?x=159&y=94&zoom=8&base64=true' } );
ww.js, WebWorker part:
var self = this;
function makeRequest( url ) {
var httpRequest = new XMLHttpRequest();
if ( !httpRequest ) {
console.error( 'Giving up. Cannot create an XMLHTTP instance.' );
return false;
}
httpRequest.onreadystatechange = function() {
var response = httpRequest.responseText;
self.onMessage = postMessage( response );
};
httpRequest.open( 'GET', url, true );
httpRequest.send();
}
self.addEventListener( 'message', function( event ) {
makeRequest( event.data.url );
});
Why is it firing several times?
May it happened because of such native AJAX use?
Check for the correct state and status of the request.
In your onreadystatechange
-handler you should do the following:
httpRequest.onreadystatechange = function() {
if (httpRequest.readyState == 4 && httpRequest.status == 200) {
var response = httpRequest.responseText;
self.onMessage = postMessage( response );
}
}