Reputation: 1
In the below posted code I have a method that returns a subscriber. What I want to do is to get or retrieve that data from the subscriber. In other words, I want to do something as follows:
console.log(getRouteGeometryFromAlexandriaToAmsterdam())
and that log statement must display the contents of
data["features"][0]['geometry']
When I just use the log statement stated above I receive a subscriber object. please let me know how to get the data from a subscriber object.
code:
public getRouteGeometryFromAlexandriaToAmsterdam() {
return this.httpClient.get("https://api.openrouteservice.org/v2/directions/.....")
.subscribe((data)=> {
console.log("getRouteGeometryFromAlexandriaToAmsterdam = " , data["features"][0]['geometry']);
return (data["features"][0]['geometry']);
});
}
Upvotes: 0
Views: 594
Reputation: 8468
It is always NOT advisable to return any value inside a subscribe callback - reason is because Observables is asynchronous, but your code is synchronous.
You did correct in your method actually, you just need to subscribe in your component (since you tag angular) and not your service. Something like this:
public getRouteGeometryFromAlexandriaToAmsterdam() {
return this.httpClient.get("https://api.openrouteservice.org/v2/directions/.....")
And in your component, do this:
this.getRouteGeometryFromAlexandriaToAmsterdam()
.subscribe(data=>{
console.log("getRouteGeometryFromAlexandriaToAmsterdam = " , data["features"][0]['geometry']);
})
Upvotes: 1
Reputation: 617
You are returning an observable in getRouteGeometryFromAlexandriaToAmsterdam
method which means you should subscribe
it to get it's value.
You can return data
instead of http service
:
public getRouteGeometryFromAlexandriaToAmsterdam() {
this.httpClient.get("https://api.openrouteservice.org/v2/directions/.....")
.subscribe((data)=> {
console.log(data);
return (data);
});
}
Or add another method:
public getRouteGeometryFromAlexandriaToAmsterdam() {
return this.httpClient.get("https://api.openrouteservice.org/v2/directions/.....")
}
getData(){
this.getRouteGeometryFromAlexandriaToAmsterdam().subscribe(res => {
console.log(res)})
}
Upvotes: 0
Reputation: 667
You can handle the response with some other function like this:
public getRouteGeometryFromAlexandriaToAmsterdam() {
return this.httpClient.get("https://api.openrouteservice.org/v2/directions/.....")
.subscribe((data)=> {
this.handleResponse(data["features"][0]["geometry"]);
});
}
public handleResponse(res) {
return res;
}
console.log(getRouteGeometryFromAlexandriaToAmsterdam());
Upvotes: 0