请解释我在Ionic 2中使用的一些方法(Angular 2)

时间:2017-02-15 03:57:11

标签: angular ionic-framework ionic2

我发现了一些Ionic 2代码here
此代码检索数据并将其解析为JSON。它看起来像这样:

posts: any; 
constructor( public http: Http ) {
  this.http.get( 'https://www.reddit.com/r/gifs/new/.json?limit=10' )
    .map( res => res.json() )
    .subscribe(
        data => {
            this.posts = data.data.children;
        }
    );
}

我不明白这两件事:

  1. res 变量是什么?它从何而来?是内部变量还是其他内容?

  2. 订阅方法的含义是什么?我想它可以访问我们将获得的数据,但为什么称为订阅

  3. 数据变量的含义是什么?我们从哪里得到它?

  4. 我还没有在网络技术中看到过这种语法:)

2 个答案:

答案 0 :(得分:3)

  1. res是来自this.http.get
  2. 中使用的api网址的回复
  3. subscribe可用于所有可观察对象,在这种情况下,只有当您订阅该请求时才会被触发
  4. data.map函数的结果,它是服务器发送的字符串的json值
  5. 阅读文档https://angular.io/docs/ts/latest/

答案 1 :(得分:2)

如果我们将此TypeScript代码转换为普通Javascript:

,您可能会更好地理解它
this.http.get( 'https://www.reddit.com/r/gifs/new/.json?limit=10' )
.map(function(res){
    return res.json();
})
.subscribe(function(data){
    this.posts = data.data.children;
});

基本上,简写“箭头”函数(() => {}parameter => return)是异步Javascript代码中常见的更详细的匿名(回调)函数的快捷方式。

正如您所看到的,res变量是传递给.map接收的回调函数的参数(每次收到响应时都会调用该参数,然后将其发送到.subscribe() } {方法),res表示“响应”,它基本上是从HTTP GET请求作为纯文本(JSON)接收的响应对象,它具有.json()方法,允许您将JSON转换为实际的Javascript对象/数组。

subscribe()函数是来自Observable(由RxJs包提供的自定义类)的方法,它是.get()返回的对象类型,然后是.map()。它就像一个Promise,除了它可以多次返回一个结果。传递给.subscribe()函数的回调函数接收data,这是.map()函数返回的内容,或者简单地说,转换为Javascript对象/数组的HTTP响应的解析后的JSON,您可以立即开始使用。