gpt4 book ai didi

javascript:worker 同步

转载 作者:行者123 更新时间:2023-11-28 04:58:52 25 4
gpt4 key购买 nike

我正在处理 HTML5 web worker,我创建了一个函数来生成几个 worker 并返回结果,但问题是它在 worker 更新结果之前返回值。所以我想延迟返回语句,直到收到所有结果

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;

所以我只想延迟返回语句直到收到结果。请帮助我了解如何在 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
}
};
}
}

现在你可以这样调用它:

doSomething(function(result){
console.log(result); //this will print the correct result.
});

有关 JS 异步操作如何工作的更多信息,我推荐这个 ajax related question其中包括对问题的描述以及解决方法。

关于javascript:worker 同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18395319/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com