如何在订阅时学习

时间:2019-01-23 06:46:12

标签: angular6 angular7 subscribe

我试图遍历一个可观察到的事物,但是它说的是不确定的。为什么会这样呢。

这是我的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);
}

2 个答案:

答案 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}
  })
}

祝你好运并享受:)