/ / Por que o WebWorker está disparando várias vezes no evento de mensagem? - javascript, ajax, multithreading, assíncrono, web-worker

Por que o WebWorker está disparando várias vezes em um evento de mensagem? - javascript, ajax, multithreading, assíncrono, web-worker

Tentando obter uma imagem em base64 do web-worker. Tudo está bem, exceto o trabalhador está respondendo várias vezes para .onmessage evento:

insira a descrição da imagem aqui

parte main.js:

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, parte WebWorker:

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 );
});

Por que está disparando várias vezes?

Isso pode ter acontecido devido ao uso de AJAX nativo?

Respostas:

0 para resposta № 1

Verifique o estado correto e o status da solicitação.
Na tua onreadystatechange-handler, você deve fazer o seguinte:

httpRequest.onreadystatechange = function() {
if (httpRequest.readyState == 4 && httpRequest.status == 200) {
var response = httpRequest.responseText;
self.onMessage = postMessage( response );
}
}