如何从可观测角度2中获得数据

我试图打印的结果 http调用在 Angular使用 rxjs

考虑以下代码

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}

即使我返回了一个 json 对象。

如何打印 getConfig的结果?

216006 次浏览

You need to subscribe to the observable and pass a callback that processes emitted values

this.myService.getConfig().subscribe(val => console.log(val));

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;
});
this.myService.getConfig().subscribe(
(res) => console.log(res),
(err) => console.log(err),
() => console.log('done!')
);