我在这里找到了一些Ionic 2代码:
此代码检索数据并将其解析为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;
}
);
}
我不明白两件事:
什么是res变量?它是从哪里来的?是内部变量还是其他什么?
订阅方法的含义是什么?我想这是为了访问我们将获得的数据,但为什么它被称为订阅?
数据变量的含义是什么?我们从哪里得到的?
我在网络技术中没有见过这种语法:)
res
是来自this.http.get
中使用的api url的响应subscribe
在所有可观察器上都可用,在这种情况下,只有当您订阅该请求时才会触发data
是.map
函数的结果,它是服务器发送的字符串的json值
阅读文档https://angular.io/docs/ts/latest/
如果我们将此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包提供的自定义类)中的一个方法,Observable是.get()和.map()返回的对象类型。它就像Promise,只是可以多次返回结果。传递给.subscribe()
函数的回调函数接收data
,这是.map()
函数返回的内容,或者简单地说,是转换为Javascript对象/数组的HTTP响应的解析JSON,您可以立即开始使用它。