繁体   English   中英

为什么WebWorker在消息事件上触发多次?

[英]Why WebWorker is firing several times on message event?

试图从Web-Worker获取base64中的图像。 一切都很好,除了worker多次回复.onmessage事件:

在此处输入图片说明

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

为什么会发射多次?

可能因为这样的本机AJAX使用而发生了吗?

检查请求的正确状态和状态。
onreadystatechange -handler中,您应该执行以下操作:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM