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];
}
);