Skip to content

Instantly share code, notes, and snippets.

@faisalmuhammad
Created June 4, 2018 10:04
Show Gist options
  • Save faisalmuhammad/efdb3c52acd6f5007ce34e327d1aec6e to your computer and use it in GitHub Desktop.
Save faisalmuhammad/efdb3c52acd6f5007ce34e327d1aec6e to your computer and use it in GitHub Desktop.
Angular | Parallel API Requests
/**
* @author Muhammad Faisal
* @description Service for getting data.
*/
// Angular Imports
import { Injectable } from '@angular/core';
import { HttpErrorResponse } from '@angular/common/http';
import { forkJoin as observableForkJoin, Observable } from 'rxjs';
@Injectable()
export class DataService {
/**
* Initializes an instance of DataService class.
*/
constructor(private readonly _messageService: MessageService) { }
/**
* Gets the messages for given message ids.
* @param messageIds Message IDs.
*/
public getMessages(messageIds: number[]): Observable<Message[]> {
return new Observable((observer) => {
// Create message request observables
const messageRequests: Observable<Message>[] = [];
for (const id of messageIds) {
messageRequests.push(this._messageService.getById(id));
}
// Create a parallel request to get messages
const parallelRequests$ = observableForkJoin(messageRequests);
parallelRequests$.subscribe((result) => {
observer.next(result);
observer.complete();
}, (error: HttpErrorResponse) => observer.error(error));
});
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment