了解如何处理来自http调用

时间:2016-05-10 13:20:57

标签: angular rxjs angular2-http

我刚开始使用Angular 2应用程序进行一些http调用,这引入了我的Observables。我仍然很难学习如何处理它们,文档对初学者来说有点缺乏。我举一个简短的例子来说明我遇到的困难:

getValue() {        
        let headers = new Headers({ 'Content-Type': 'text/plain' });
        let options = new RequestOptions({ headers: headers });
        return this.http.get('http://url/boolean.json', options)
}

这是一个返回布尔值的get调用。现在如果我想在函数中使用这个值,我会本能地期望我可以像这样分配一个变量:

let varName = this.getValue()

显然这是不可能的,我读到为了从一个观察者获得输出,你需要订阅它。是不是有可能让我的函数getValue()返回一个布尔值而不是一个可观察的?但是在这种情况下,由于我只需要有布尔值,我不确定异步编程是否有意义?这不会花费很长时间。在Angular 2中是否还有一种方法可以摆脱这种异步行为(对于像这样的简单函数?)?

1 个答案:

答案 0 :(得分:2)

你可以"模拟"使用Angular2的async管道的伪同步模式:

<div>{{value | async}}</div>

在这种情况下,value是可观察的,而不是HTTP响应的内容。

这样Angular2就会为您订阅并管理相应的订阅。收到数据后,模板会相应更新。

您实际上可以绕过异步模式,因为它是基础API(XMLHttpRequest)执行HTTP请求(更常见的是JavaScript)的工作方式。

您可以注意到Rx / Observable对链处理非常强大。例如,您可以利用flatMap之类的运算符,并且只能在链的末尾订阅。这是一个示例:

this.getValue().flatMap((data) => {
  // return another observable
  return this.getAnotherRequest();
}).subscribe((data) => {
  // data is the result of the second request
});

这个Rx教程可以帮助你:

修改

以下是利用运营商的方法:

this.getCurrentUser().flatMap((user) => {
  // return another observable
  return this.getData(user);
}).subscribe((data) => {
  // data is the result of the second request
}, (err) => {
  // no current user, ...
});