Как подписаться на подписку - PullRequest
0 голосов
/ 23 января 2019

Я пытаюсь перебрать наблюдаемое, но оно говорит неопределенное. почему это так.

Это мой ответ API

[
  {
    "id": 5,
    "name": "Ram",
    "description": "desc",
    "active": false
  },
  {
    "id": 4,
    "name": "Ram",
    "description": "desc",
    "active": false
  },
  ]

Но я хочу отфильтровать это так

 this.model.users = [
      {uId: 1, uNAme: Ram},
    ];

Итак, чтобы достичь этого, мне нужно было бы перебрать мою подписку, но там говорится: undefined

 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;
 }

serice:

get(requestSearch: ProjectRequest): Observable<any> {
  return this.http.post<any>(this.projectUrl, requestSearch,  httpOptions);
}

Ответы [ 2 ]

0 голосов
/ 23 января 2019

Хорошо, значит, ваша проблема в том, что вы выполняете ответ до того, как получите ответ, потому что ваше использование наблюдаемого приложения продолжает работать и не останавливается при подписке.

то, что вы можете сделать, это в основномкак это:

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

удачи и наслаждайтесь:)

0 голосов
/ 23 января 2019

Измените свой сервисный звонок, как показано ниже, и надеюсь, что он будет работать.

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;
}
}
...