Angular+Rxjs遇到foreach需要每个都掉完值然后再进行统一返回的处理 使用forkJoin
- 首先这边是有一个数组,然后拿到数组里面的值进行调接口,然后再把所有的值组合一起进行调接口
- 会用到rxjs的forkJoin处理
- 用到mergeMap 是会调两遍接口获取到最后数据进行处理,这里返回的是一个数组Array<{file: v.value, resultFIle: res}>
const fileLists: Array<AbstractControl> = (query?.formGroup.get('files') as FormArray).controls;
let fileSub: Array<Observable<{ file: KvType; resultFile: FileMessage }>>;
fileSub = fileLists.map(v =>
(this.http.post(`${ResourceName.vcmFile}?filetype=5&objectName=${encodeURIComponent((v.get('file')?.value as File).name)}`, v.get('file')?.value as File).pipe(
mergeMap(result => this.resService.get<FileMessage>(ResourceName.vcmFile, result)),
mergeMap(res => of({
file: v.value,
resultFile: res,
})),
)));
forkJoin(fileSub).subscribe(res=>{console.log(res)});