我发现了一些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;
}
);
}
我不明白这两件事:
res 变量是什么?它从何而来?是内部变量还是其他内容?
订阅方法的含义是什么?我想它可以访问我们将获得的数据,但为什么称为订阅?
数据变量的含义是什么?我们从哪里得到它?
我还没有在网络技术中看到过这种语法:)
答案 0 :(得分:3)
res
是来自this.http.get
subscribe
可用于所有可观察对象,在这种情况下,只有当您订阅该请求时才会被触发data
是.map
函数的结果,它是服务器发送的字符串的json值答案 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,您可以立即开始使用。