Невозможно сохранить ответ метода POST

#angular #httpclient

#angular #httpclient

Вопрос:

Я могу утешать.запишите ответ метода POST. Но я хочу сохранить этот ответ в переменной, чтобы использовать его в дальнейшем в коде. Пожалуйста, помогите.

вызов метода post отправляет объект в качестве ответа.

student.ts (Student — это класс, который совпадает с объектом, полученным из запроса post.)

 export class Student {
ID : number;
firstName : string;
}
  

метод component.ts (on submit) вызывается при отправке формы. this.student выдает вывод как неопределенный)

 public student : Student[];

onSubmit() {
    this._studentService.addData(this.addStudentForm.value)
      .subscribe( response => console.log("respnse", response),
        );
    console.log(this.student);
  }
  

service.ts

 addData(studentData) : Observable<any> {
    return this.http.post<any>(this._url, studentData);
  }
  

Когда я пытаюсь сохранить ответ в переменной, я получаю вывод как неопределенный.
Как я могу сохранить ответ в переменной?

Ответ №1:

Вы должны просто добавить this.student = response; внутри subscribe:

 this._studentService.addData(this.addStudentForm.value).subscribe( response => {
    console.log("respnse", response);
    this.student = response;
});
  

Но если вы хотите что-то student сделать, вам следует сделать это внутри next обратного вызова subscribe:

 this._studentService.addData(this.addStudentForm.value).subscribe( response => {
    console.log("respnse", response);
    this.student = response;
    console.log(this.student) <- THIS WILL WORK - STUDENT IS NOT UNDEFINED
    // HERE ARE YOUR METHODS WHICH ARE USING STUDENT
});
  

Это console.log после subsrciption все равно будет неопределенным, потому что этот код будет выполнен ДО завершения подписки, поэтому student undefinded на данный момент.

Комментарии:

1. Хотя это добавит ответ this.student , пожалуйста, объясните OP, почему console.log(this.student) все равно будет undeined

2. @jasmin я добавил объяснение к своему ответу, проверьте его

3. о, @yasmin не присваивает значение свойству student

Ответ №2:

Попробуйте:

 public responseData:any; 
public onSubmit() {
  this._studentService.addData(this.addStudentForm.value).subscribe((response:any)=> { 
    console.log("success: ", JSON.stringify(response)); 
    this.responseData = response; 
  }, (error:any){
    console.log("error: ", JSON.stringify(error));
  });
}
  

Комментарии:

1. что вы можете увидеть в консоли разработчика?

2. Я получаю успех и ответ {«FirstName»:»qwert»,»LastName»:»qwerf»,»DateOfBirth»:»2019-04-24T20:00:00.000Z»} @Khurshid я новичок в angular и, следовательно, я не знал, что объем полученного ответа ограничен подпиской. Итак, это был мой главный вопрос.