5人のWebワーカーを作成して操作を実行するコードを開発しました。私は単にWebワーカーに整数を送り、合計を生成してjsonオブジェクトを返すだけです。私はその結果を配列にプッシュしています。この配列は、すべてのWebワーカーが作業を完了したらローカルストレージに格納されます。ローカルストレージに格納された配列は、各Webワーカーから返された順序で値を格納しません。 Webワーカーが最初に値を返した場合、配列の値はゼロインデックスに含まれている必要があります。つまり、非同期操作が満たされていないことを意味します。これをどうやって行うのですか?ここでasync Webワーカーとしてデータを配列にプッシュする結果
は.jsファイルのための私のコードです:
window.onload = init;
var running = 0;
var arr=[1,1001,2001,3001,4001];
var sec=[1000,2000,3000,4000,5000]
var results=[];
function init() {
sendworker();
}
function sendworker()
{
var n, worker;
display("Starting workers...");
for (n = 0; n <5; ++n) {
workers = new Worker("jsonWorker.js");
workers.onmessage = workerDone;
workers.postMessage({id: n, start: arr[n],end:sec[n]});
++running;
}
}
function workerDone(e) {
--running;
display("Worker " + e.data.id + " is done, sum of integers between: "+e.data.start+ "&"+e.data.end+"=" + e.data.sum);
results.push(e.data.sum);
if (running === 0) { // <== There is no race condition here, see below
display("All workers complete");
window.localStorage.setItem("Results", JSON.stringify(results));
}
}
function display(msg) {
var p = document.createElement('p');
p.innerHTML = String(msg);
document.body.appendChild(p);
}
//ウェブのための私のコードは
this.onmessage = function(e) {
var data = e.data;
var a=data.start;
var b=data.end;
var c=0;
for (var i=a; i<= b; i++) {
c=c+i;
}
this.postMessage({id: e.data.id,start:a,end:b,sum: c});
を} worker.js。画像ワーカー0で
そのデータをローカルストレージに格納された配列の第2のインデックスになければならないので、最初の結果を戻したが、それはありません。オフセットとして
私はこれらが2つの異なる実行の結果だと思います。これは起こることができません –