Amrmsmb
Amrmsmb

Reputation: 1

How to get data from a subscriber object?

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

Answers (3)

CozyAzure
CozyAzure

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

Saghi Shiri
Saghi Shiri

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

Vinay Somawat
Vinay Somawat

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

Related Questions