Angular RXJS:按队列的请求-ForkJoin
我正在尝试通过队列进行图像上载。目前,我需要上传五张图片 例如,如果我有10张图片,我需要上传5张图片,当这5张图片被上传时,我需要对剩下的5张图片做另一个请求 经过大量搜索和测试大量RXJS运算符/函数后,我可以通过(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
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[文件夹]| |[],图像]}),
{}
))
);
}
哦,太好了,谢谢。让我测试一下,然后回来。非常感谢