Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular RXJS:按队列的请求-ForkJoin_Angular_Rxjs - Fatal编程技术网

Angular RXJS:按队列的请求-ForkJoin

Angular RXJS:按队列的请求-ForkJoin,angular,rxjs,Angular,Rxjs,我正在尝试通过队列进行图像上载。目前,我需要上传五张图片 例如,如果我有10张图片,我需要上传5张图片,当这5张图片被上传时,我需要对剩下的5张图片做另一个请求 经过大量搜索和测试大量RXJS运算符/函数后,我可以通过(concat-RXJS函数)和(scan和last-RXJS运算符)找到此解决方案: index.html中的 // added chunk function into array protptype Array.prototype.chunk = function (chun

我正在尝试通过队列进行图像上载。目前,我需要上传五张图片

例如,如果我有10张图片,我需要上传5张图片,当这5张图片被上传时,我需要对剩下的5张图片做另一个请求

经过大量搜索和测试大量RXJS运算符/函数后,我可以通过(
concat
-RXJS函数)和(
scan
last
-RXJS运算符)找到此解决方案:

index.html中的

// added chunk function into array protptype
 Array.prototype.chunk = function (chunkSize) {
     var R = [];
     for (var i = 0; i < this.length; i += chunkSize) {
        R.push(this.slice(i, i + chunkSize));
     }

     return R;
  }
用法示例

this.uploadImages(/* Array of files*/).subscribe(response => {console.log(response); })

我知道有没有其他解决方案或最佳实践来解决这些情况。也许我错过了什么,因为我不确定这是最好的解决方案

另外:以下是当前逻辑的模拟:


感谢大家抽出时间。

下面是我将如何做到这一点,同时进一步学习RXJ和不可变对象/数组

可能需要一些调整,因为我没有真正测试这个。这和你现在做的基本上是一样的

上传图像(图像:文件[]){
从(图像)返回。管道(
映射(file=>this.\u baseAPI.filesManagement.uploadFile({file,'image'})),
//块5
缓冲计数(5),
//一次执行5个请求
concatMap(需求=>forkJoin(需求)),
//与上一个类似,但创建了一个排放阵列(其本身就是大小为5的阵列)
toArray(),
//将阵列阵列展平为单个阵列,并显示所有结果
映射(arr=>arr.flat()),
//转换所有响应
映射(res=>res.reduce((
acc:{[key:string]:string[]},
{文件夹,图像}:{文件夹:字符串;图像:字符串}
)=>({…acc,文件夹:[…acc[文件夹]| |[],图像]}),
{}
))
);
}

哦,太好了,谢谢。让我测试一下,然后回来。非常感谢