Angular + RxJS: How to make parallel request for each item in an array?
I have an array of IDs. For eg: [1,2,3,4].
I would like to make parallel calls and get the result with forkJoin
for each element of the array. But below code is not working for me.
forkJoin(
Array.from(this.question.attachments).map(attachment => {
return mergeMap((attachment) => ) // i am stuck here.
})
)
.pipe(
takeUntil(this.destroy$),
finalize(() => this.spinnerService.hide())
)
.subscribe((attachmentIds) => {
this.uploadedAttachments = attachmentIds;
this.onFilesAttached.emit(this.uploadedAttachments);
});
Can anyone help me how to achieve this? Thanks
Solution 1:
You're almost there. forkJoin
function expects an array or object of observables. So you only need to return the observable from the Array#map
function. HTTP calls using Angular HttpClient
returns an observable by default. So there is no need for the mergeMap
operator.
Also the usage of mergeMap
is wrong here. It returns an OperatorFunction
and not an observable.
Try the following
forkJoin(
Array.from(this.question.attachments).map(attachment =>
this.someService.getIds(attachment) // <-- return the HTTP call here
)
).pipe(
...
Also in case if you weren't aware, an arrow function with a single statement without curly braces returns the statement by default.
So the following
Array.from(this.question.attachments).map(attachment =>
this.someService.getIds(attachment)
)
is same as writing
Array.from(this.question.attachments).map(attachment => {
return this.someService.getIds(attachment);
})