Hamza Haddad
Hamza Haddad

Reputation: 1556

Get data outside of a service call

I'm using a service that gets data , that I will use it in my component.

ngOnInit() {
    this.EJnames= this.dataservice.getResults();
    this.generalinfosservice.getResults("nothing").then(data=>{this.datas=data; console.log(data)});
    console.log(this.datas);
  }

In my getResult() function I have a method that uses to Promise to get all data.

post( url, mockUrl, body) {
    if( environment.mocked ) {
        return this.httpClient.get( mockUrl ).toPromise().then( data => { return data} );
    } else {
        return this.httpClient.post( url, JSON.stringify( body ) )
            .toPromise()
            .then( data => {
                return data;
            }, ( err: any ) => {
                return this.handleError( err.message );
            } );
    }
}

The first console.log(data) is returning my data

but console.log(this.data) is returning an empty array.

How can I pass data to this.data or should I put my code in then "function" ?

Upvotes: 0

Views: 74

Answers (2)

Tularis
Tularis

Reputation: 1506

You've basically answered your own question. .then( data => { return data; })

will return data to the event dispatcher. This will not set this.data = data;

So the solution would be to change it to:

   .then( data => {
      this.data = data;
   })

Upvotes: 0

Daniel W Strimpel
Daniel W Strimpel

Reputation: 8470

Anything that you need to do to process the data, etc. needs to go in the then function. The getResults method is asynchronous and the then method will be processed at some time later in the future when the promise resolves. When the code returns from the getResults method it will continue on executing the rest of the code in your ngOnInit method. It does not wait to execute the rest of your promise chain before moving onto the next line.

Upvotes: 2

Related Questions