vic*_*cky 1 javascript html5 web-worker
我正在研究HTML5 web worker,我创建了一个函数来生成几个worker并返回结果,但问题是它在worker更新结果之前返回值.所以我想延迟return语句,直到收到所有结果
for (i = 0; i < array1_rows; i++)
{
var worker = new Worker('json.js');
worker.postMessage(arr1[i]);
worker.postMessage(arr2);
worker.postMessage(i);
worker.onmessage = storeResult;
}
/////////////////////////////////
return result;
Run Code Online (Sandbox Code Playgroud)
所以我只想延迟返回语句,直到收到结果.Plz帮助我如何在java脚本中使用yield.
就像评论指出的那样 - Web Workers异步工作(想想AJAX是如何工作的)
您可以使用异步信号量仅在它们全部完成时才产生
function doSomething(callback){
var counter = array1_rows;
for (i = 0; i < array1_rows; i++)
{
var worker = new Worker('json.js');
worker.postMessage(arr1[i]);
worker.postMessage(arr2);
worker.postMessage(i);
worker.onmessage = function(){
storeResult.apply(arguments);//call it the same way it was called before.
counter--;
if(counter === 0){ // all workers returned
callback(result); //or whatever you're updating in storeResult
}
};
}
}
Run Code Online (Sandbox Code Playgroud)
现在你可以这样称呼:
doSomething(function(result){
console.log(result); //this will print the correct result.
});
Run Code Online (Sandbox Code Playgroud)
有关JS异步操作如何工作的更多信息,我推荐这个与ajax相关的问题,其中包括对问题的描述以及如何处理它.