所以我不是JavaScript的新手,但我正在尝试学习Angular2以及更多关于JavaScript ES6 Promises的内容,而我正在通过this tutorial来完成这项工作。在构建pokedex-service.ts
文件的部分中,getPokemon()
函数的一部分如下所示:
getPokemon(offset: number, limit: number) {
return this.http.get(`${this.baseUrl}?offset=${offset}&limit=${limit}`)
.toPromise()
.then(response => response.json().results) //<- line in question
.then(
// ... etc ...
);
}
我理解使用Angular的HTTP服务,它会返回一个Observable然后转换为Promise(通过toPromise()
),但我很困惑下一行会发生什么:
.then (response => response.json().results)
。
具体来说,我得到response
是传递给Promise的占位符,我知道response.json()
将Promise的结果转换为JSON对象。但我无法弄清楚.results
链接到response.json()
末尾的results
属性。
我已经检查了the Body.json() API,并且认为它可能是Promises的属性,我检查了the Promises API,但在API中找不到与{{{3}对应的任何属性(OR方法) 1}}。这是什么属性,它来自哪里?
此外,它与简单地使用response.json()
有何不同,以及传递到下一个then()
的返回值是什么?
答案 0 :(得分:0)
当您请求服务器时,响应将是一个字符串。 .json()函数在这里说“我将你的字符串响应转换为Javascript对象”。那是json()的工作。然后,一旦有了对象,就可以访问他的财产。这里,服务器返回一个带有属性结果的对象。
getPokemon(offset: number, limit: number) {
return this.http.get(`${this.baseUrl}?offset=${offset}&limit=${limit}`)
.toPromise()
.then(response => response.json().results) //<- line in question
.then(
(data) => { // your code }
);
}
数据将包含“results”属性的内容
您应该使用“Rxjs”库中的运算符映射,如下所示:
return return this.http.get(`${this.baseUrl}?offset=${offset}&limit=${limit}`)
.map(res => res.json())
.toPromise();
更通用。使用此代码,即使服务器没有返回具有“results”属性的对象,它也会起作用。
和导入
import 'rxjs/add/operator/toPromise';
import 'rxjs/add/operator/map';