gpt4 book ai didi

javascript - 等待一组 worker 完成

转载 作者:行者123 更新时间:2023-11-28 14:50:09 25 4
gpt4 key购买 nike

我有一组网络 worker ,称为workers。我在一个名为 activate 的函数中启动它们。问题是,我想让 activate 返回由 worker 发布的值。我要么希望它返回某种 promise ,要么等到它们全部完成。

所以代码可以是:

// the web workers add stuff in this array with onmessage()
var globalArray = [];
function activate(){
for(var i = 0; i < workers.length; i++){
workers[i].postMessage('do something');
}

return // Promise or filled globalArray;
}

所以我可以这样使用它:

var values = await activate();

我不希望工作人员在最后一个工作人员完成后调用单独的函数。有什么办法可以实现这个目标吗?

最佳答案

你想要做的是创建Promise,并在Promise的函数内部,启动所有worker并检查最后一个何时结束以调用promise的resolve函数,并在你的activate函数中返回这个promise .

会是这样的:

// the web workers add stuff in this array with onmessage()
var globalArray = [];
function activate(){
var promise = new Promise(function(resolve, reject){
var counter = 0;
var array = [];
var callback = function(message){
counter++;
//You can add here the values of the messages
globalArray.push(message.data);
//Or add them to an array in the function of the Promise
array.push(message.data);
//And when all workers ends, resolve the promise
if(counter >= workers.length){
//We resolve the promise with the array of results.
resolve(array);
}
}
for(var i = 0; i < workers.length; i++){
workers[i].onmessage = callback;
workers[i].postMessage('do something');
}
});
return promise;
}

该代码目前尚未经过测试,但希望您能明白。

关于javascript - 等待一组 worker 完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44829534/

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