How to get data from observable in angular2
I am trying to print the result of http
call in Angular
using rxjs
Consider the following code
import { Component, Injectable, OnInit } from '@angular/core';
import { Http, HTTP_PROVIDERS } from '@angular/http';
import 'rxjs/Rx';
@Injectable()
class myHTTPService {
constructor(private http: Http) {}
configEndPoint: string = '/my_url/get_config';
getConfig() {
return this.http
.get(this.configEndPoint)
.map(res => res.json());
}
}
@Component({
selector: 'my-app',
templateUrl: './myTemplate',
providers: [HTTP_PROVIDERS, myHTTPService],
})
export class AppComponent implements OnInit {
constructor(private myService: myHTTPService) { }
ngOnInit() {
console.log(this.myService.getConfig());
}
}
Whenever I tried to print out the result of getconfig
it always return
Observable {_isScalar: false, source: Observable, operator: MapOperator}
even though I return a json object instead.
How would I print out the result of getConfig
?
Solution 1:
You need to subscribe to the observable and pass a callback that processes emitted values
this.myService.getConfig().subscribe(val => console.log(val));
Solution 2:
Angular is based on observable instead of promise base as of angularjs 1.x, so when we try to get data using http
it returns observable instead of promise, like you did
return this.http
.get(this.configEndPoint)
.map(res => res.json());
then to get data and show on view we have to convert it into desired form using RxJs functions like .map() function and .subscribe()
.map() is used to convert the observable (received from http request)to any form like .json(), .text()
as stated in Angular's official website,
.subscribe() is used to subscribe those observable response and ton put into some variable so from which we display it into the view
this.myService.getConfig().subscribe(res => {
console.log(res);
this.data = res;
});
Solution 3:
this.myService.getConfig().subscribe(
(res) => console.log(res),
(err) => console.log(err),
() => console.log('done!')
);