创建web工作者,一次只处理几个文件- javascript

Create web workers to process only few files at a time - javascript

本文关键字:javascript 几个 文件 处理 一次 工作者 web 创建      更新时间:2023-09-26

我正在使用webworker概念上传文件。如果我选择10个文件上传,我最终会创建10个网络工作者来处理它们。我正在考虑创建5个web worker线程来处理第一批5个文件的上传,终止5个线程然后选择下一批5个文件上传。我不确定如何实现它。请建议。

我当前的逻辑是:

for (var i = 0; i<files.length; i++){
    //create web worker 
    //upload the file
    //terminate the web worker
}
编辑:

为了实现这一点,我试着做这样的事情,但这是一个无限循环,永远不会中断。请告诉我出了什么问题。

 var num = 5;
var alreadyPicked = new Set();
var pickList = [];
var isPicked = false;
while(true){
if( pickList.length == num ){
    $timeout( function() {}, 3000); //wait for 3 secs
}
for(var j=0; j<files.length; j++){
    isPicked = alreadyPicked.has( files[j] );
    if( !isPicked ){
        pickList.push( files[j] ); //add the file to the array if it is not processed
    }
    if( pickList.length === num ){
        break;
    }
}
if( pickList.length > 0 ){
    for( var j=0; j<pickList.length; j++ ){
        $scope.process( pickList[j] );
    }
}
else{
    break;
}

}

$scope.process = function(item){
    //rest api call to upload the file to server
    if( success || error ){
        pickList.splice( pickList.indexOf(item,1));
        alreadyPicked.add(item);
    }

一个想法:

  1. 之前创建一个数组,列出所有文件。
  2. 从这个数组中抓取5个元素进行循环。
  3. 当一个worker完成后,从数组中删除这个文件名
  4. 从数组中抓取另外5个项目,并重复。