Angular 2和RxJS:如何更改返回Observable的HTTP调用
如何更改此函数以使用下面描述的JSON更改 当前函数返回一个Angular 2和RxJS:如何更改返回Observable的HTTP调用,angular,rxjs,observable,angular2-observables,Angular,Rxjs,Observable,Angular2 Observables,如何更改此函数以使用下面描述的JSON更改 当前函数返回一个可观察的,但是使用新的JSON,添加了新的admin对象。新功能应能成功观察现有的用户数组和新的管理员数组 getData(): Observable<User[]> { return this.http .get('www.example.com/api/users) .map((r: Response) => r.json().assets.users as User[]); } …现在返回两
可观察的
,但是使用新的JSON,添加了新的admin
对象。新功能应能成功观察现有的用户
数组和新的管理员
数组
getData(): Observable<User[]> {
return this.http
.get('www.example.com/api/users)
.map((r: Response) => r.json().assets.users as User[]);
}
…现在返回两个数组,users
和admins
{
"assets": {
"users": [
// array of user objects
],
"admins": [
// array of admin objects
]
}
请假设我的代码已经创建了
User
和Admin
类,它们正确地反映了返回的相关JSON对象的属性。好吧,您有几个选项可以返回数据:
getData(): Observable<User[]> {
return this.http
.get('www.example.com/api/users')
.map((r: Response) => {
const assets = r.json().assets;
return {
users: assets.users as User[],
admins: assets.admins as Admin[]
}
});
}
getData():可观察{
返回此文件。http
.get('www.example.com/api/users'))
.map((r:Response)=>{
const assets=r.json().assets;
返回{
用户:assets.users作为用户[],
管理员:assets.admins作为管理员[]
}
});
}
或者像这样:
getData(): Observable<User[]> {
return this.http
.get('www.example.com/api/users')
.map((r: Response) => {
return [
assets.users as User[],
assets.admins as Admin[]
]
});
}
getData(): Observable<User[]> {
return this.http
.get('www.example.com/api/users')
.map((r: Response) => {
return [
...assets.users as User[],
...assets.admins as Admin[]
]
});
}
getData():可观察{
返回此文件。http
.get('www.example.com/api/users'))
.map((r:Response)=>{
返回[
assets.users作为用户[],
assets.admins作为Admin[]
]
});
}
或者像这样:
getData(): Observable<User[]> {
return this.http
.get('www.example.com/api/users')
.map((r: Response) => {
return [
assets.users as User[],
assets.admins as Admin[]
]
});
}
getData(): Observable<User[]> {
return this.http
.get('www.example.com/api/users')
.map((r: Response) => {
return [
...assets.users as User[],
...assets.admins as Admin[]
]
});
}
getData():可观察{
返回此文件。http
.get('www.example.com/api/users'))
.map((r:Response)=>{
返回[
…assets.users作为用户[],
…assets.admins作为管理员[]
]
});
}
如果您希望在同一数组中同时返回用户和管理员,则应使用以下代码:
getData(): Observable<User[]> {
return this.http
.get('www.example.com/api/users)
.map((r: Response) => {
var results = r.json();
return results.assets.users.concat(results.assets.admins);
}
}
结果将等于:
[ { "name": "bob" }, { "name": "john" }, { "name": "jill" }, { "name": "donald" } ]
正如我在@Maximus answer的评论中所解释的那样,
.map()
用于将数组转换为新数组,这就是为什么要将函数馈送到.map()
以告诉它您要查找的数组。那么您想要什么呢?不清楚谢谢你的反馈。我在问题的开头添加了更多的细节。新函数应该成功地观察到-通过观察,您的意思是从两个数组返回对象吗?或者返回两个数组?第一个:从两个数组返回对象。但这不是它的工作方式,它返回一个用户数组,而不是用户对象来解释这里发生了什么:.map()
使用它附加到的数组中的值返回一个新数组。因此,为了返回一个包含用户和管理员的新数组,需要在.map()
中使用一个函数将响应数据转换为新的所需数组。我可以这样说吗?你们两个摇滚!对于RxJS新手来说,这是一个很好的回答和解释。我现在将致力于实现这一点。我希望我的编辑能有所帮助。我试着按照指导方针和“展示研究成果”,但我可能有点迷失了方向。@Maximus你能解释一下你最终答案中“…资产”中的省略号吗?@JerryHuckins,当然,这就是所谓的扩展语法,并且已经解释过了。如果有帮助,请考虑接受我的回答。Thanks@Maximus我接受了你的回答。如果你发现这个问题有用,请考虑它的投票。