page change javascript angular angular-services

javascript - change - Angular 2: dos llamadas de servicio back-end en el éxito del primer servicio



dynamic title angular 5 (1)

En mi aplicación Angular 2, tengo el servicio de fondo como se muestra a continuación.

getUserInterests() { return this.http.get(''http://localhost:8080/test/selections'').map((res: Response) => res.json()); }

Después de llamar a este servicio, quiero llamar a otro servicio en caso de éxito del anterior.

2do servicio

let params: URLSearchParams = new URLSearchParams(); params.set(''access_token'', localStorage.getItem(''access_token'')); return this.http.get(''http://localhost:8080/user/selections'', { search: params }).map((res: Response) => res.json());

Estos dos servicios devuelven por separado dos matrices JSON. Entonces necesito hacer un inicio de sesión con estas dos matrices.

EDITADO

service.ts

getUserInterests() { return this.http.get(''http://localhost:8080/test/selections'').map((res: Response) => res.json()); } getSavedSelections() { let params: URLSearchParams = new URLSearchParams(); params.set(''access_token'', localStorage.getItem(''access_token'')); return this.http.get(''http://localhost:8080/interest/user/selections'', { search: params }).map((res: Response) => res.json()); } getSelectionList() { var obs = this.getUserInterests().flatMap( (interests) => { return Observable.forkJoin([ Observable.of(interests), this.getSavedSelections() ]); } ); return obs; }

Luego estoy usando siguiente en mi otro archivo ts para llamar al servicio.

export class InterestsComponent { private interests; private saved_interests; constructor(private dataService: DataService) { this.dataService.getSelectionList().subscribe( (result) => { var interests = result[0]; var selections = result[1]; } ); } }

Pero esto da el siguiente error en el registro de la consola.

ORIGINAL EXCEPTION: TypeError: this.dataService.getSelectionList is not a function

Cualquier sugerencia es apreciada.


flatMap aprovechar el operador flatMap para llamar a una solicitud después de completar la anterior:

this.service.getUserInterests().flatMap( (interests) => { let params: URLSearchParams = new URLSearchParams(); params.set(''access_token'', localStorage.getItem(''access_token'')); return this.http.get(''http://localhost:8080/user/selections'', { search: params }).map((res: Response) => res.json()); } );

Al suscribirse a este flujo de datos, solo recibirá el resultado de la última solicitud.

Puede usar el método Observable.forkJoin para devolver ambos. Aquí hay una muestra:

var obs = this.service.getUserInterests().flatMap( (interests) => { return Observable.forkJoin([ Observable.of(interests), this.service.getUserSelections() ]); } ); obs.subscribe( (result) => { var interests = result[0]; var selections = result[1]; } );