我试图遍历一个可观察到的事物,但是它说的是不确定的。为什么会这样呢。
这是我的API回复
[
{
"id": 5,
"name": "Ram",
"description": "desc",
"active": false
},
{
"id": 4,
"name": "Ram",
"description": "desc",
"active": false
},
]
但是我想用这种方式进行过滤
this.model.users = [
{uId: 1, uNAme: Ram},
];
因此,要实现这一点,我需要遍历订阅,但说的是未定义
export class TestComponent implements OnInit {
usersArray: User[];
response: any;
constructor(private service: MyService) {
this.service.get(this.requestModel).subscribe(users => this.response = users);
this.response.forEach(element => {
this.usersArray.push({
uId: element.id,
uNAme: element.name
});
});
this.model.users = this.usersArray;
}
型号
export class User {
public uId: number;
public uNAme: string;
}
服务:
get(requestSearch: ProjectRequest): Observable<any> {
return this.http.post<any>(this.projectUrl, requestSearch, httpOptions);
}
答案 0 :(得分:1)
像下面这样更改您的服务电话,希望它能正常工作。
export class TestComponent implements OnInit {
usersArray: User[];
response: any;
constructor(private service: MyService) {
this.service.get(this.requestModel).subscribe((data: any) => {
this.response = data;
this.response.forEach(element => {
this.usersArray.push({
uId: element.id,
uNAme: element.name
});
});
}
this.model.users = this.usersArray;
}
}
答案 1 :(得分:1)
好,所以您的问题是您在获得响应之前先运行响应 因为您使用的是可观察的,您的应用程序仍在运行,并且不会停止在 订阅。
您可以做的基本上是这样的:
export class TestComponent implements OnInit {
usersArray: User[];
response: any;
constructor(private service: MyService) {
this.service.get(this.requestModel).subscribe(users =>{
this.response = users;
this.response.forEach(element => {
this.usersArray.push({
uId: element.id,
uNAme: element.name
});
});
}
);
this.model.users = this.usersArray;
}
但是我会考虑使用filter()而不是使用foreach。 //不是个好主意。
好吧,在正确阅读之后,您要做的就是使用Map()函数,如下所示:
this.service.get(this.requestModel).subscribe(users =>{
this.response = users.map((user)=>{
return {uId:user.id, uNAme: user.name}
})
}
祝你好运并享受:)