【问题标题】:How to get data from observable in angular2如何从angular2中的observable获取数据
【发布时间】:2016-07-23 13:23:13
【问题描述】:

我正在尝试使用rxjsAngular 中打印http 调用的结果

考虑下面的代码

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());
    }
}

每当我尝试打印出getconfig 的结果时,它总是返回

Observable {_isScalar: false, source: Observable, operator: MapOperator}

即使我返回一个 json 对象。

如何打印getConfig 的结果?

【问题讨论】:

  • 你找到解决方案了吗?

标签: typescript angular reactive-programming rxjs observable


【解决方案1】:

您需要订阅 observable 并传递一个处理发出值的回调

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

【讨论】:

  • 它的res.json() 而不是res.json
  • 嗯。但没有提到它所以发表评论
  • 不确定您上次评论的意思。它已经在问题的代码中。订阅时无需再次转换为 JSON。
  • 嗯我只是想说我们当时需要转换成 .json() 或 .map()。
  • console.log(JSON.stringify(val))
【解决方案2】:

Angular 基于 observable 而不是从 angularjs 1.x 开始的 promise 基础,所以当我们尝试使用 http 获取数据时,它会返回 observable 而不是 promise,就像你做的那样

 return this.http
      .get(this.configEndPoint)
      .map(res => res.json());

然后要获取数据并在视图中显示,我们必须使用 RxJs 函数将其转换为所需的形式,例如 .map() function and .subscribe()

.map() 用于将 observable(从 http 请求接收)转换为任何形式,如 Angular 官网中所述的.json(), .text()

.subscribe() 用于订阅那些可观察到的响应并将其放入某个变量中,以便我们将其显示到视图中

this.myService.getConfig().subscribe(res => {
   console.log(res);
   this.data = res;
});

【讨论】:

  • 如果服务需要时间来返回数据并且您需要在下一个函数中使用 this.data 怎么办?
  • 那么你可以使用 aync/await 或者你可以在 http 服务调用中调用你的下一个函数。两种方式都应该有效。
【解决方案3】:
this.myService.getConfig().subscribe(
  (res) => console.log(res),
  (err) => console.log(err),
  () => console.log('done!')
);

【讨论】:

    猜你喜欢
    • 2018-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-12
    • 2019-10-15
    相关资源
    最近更新 更多