我曾經在一個網絡工作者下面的代碼:多個Web工作者Ajax請求,而不是所有返回
self.addEventListener('message', function(e){
try {
var xhr=new XMLHttpRequest()
for(var i = 0; i < e.data.urls.length;i++){
xhr.open('GET', e.data.urls[i], true);
xhr.setRequestHeader('Accept', 'application/json');
xhr.send(null);
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
if (xhr.status == 200 || xhr.status == 304 || xhr.status ==0) {
postMessage(xhr.responseText);
} else {
postMessage(xhr.status + xhr.responseText);
throw xhr.status + xhr.responseText;
}
}
};
}
} catch (e) {
postMessage("ERROR:"+e.message);
}
}, false);
e.data.urls包含16個請求,這是在UI線程處理是這樣的:
var replies = 0;
worker.addEventListener('message', function(e){
replies += 1;
});
只有10個請求完成,這是因爲在所有請求返回之前UI線程已經停止,還是有其他東西丟失?
評論指出,發送一個AJAX請求,只是從發佈你的工人的消息的代碼。你看到多少個回覆? – akonsu
16條消息以正常的postMessage調用返回,這是正確的數量。必須是同步的東西。 – dagda1
可並行運行的xhr請求數量有限制。你可以使用'xhr.open('GET',e.data.urls [i],false)嘗試同步嗎? – pd40