подписка () возвращает неопределенный без консоли в Angular 5 - PullRequest
0 голосов
/ 22 мая 2018

Мой проект в Angular 5, и я должен сохранить ответ API в переменной.Когда я помещаю console.log внутри подписки, он возвращает массив json, но без console.log() subscribe() возвращает неопределенное значение.

Мой код

 export class GalleryComponent {
 private apiUrl = 'http://fullpath';
 private response: any;
 private data: any;
 private category: any;

 constructor(private http: HttpClient) {
   this.getCategory();
 }

 /*getCategory() {
  this.http.post(this.apiUrl, {}).subscribe(res => {
     console.log(this.response = res['result']['data']);
  });---------------------This returns JSON data from API successfully*/
 getCategory() {
   this.http.post(this.apiUrl, {}).subscribe(res => {
      this.response = res['result']['data'];
   });
   console.log(this.response);//------This returns undefined
   }
 }

Я новичок в Angular.Как я мог решить это.

Ответы [ 3 ]

0 голосов
/ 22 мая 2018

Функция http.post () является асинхронной.Вы выполняете функцию post и затем переходите к следующему оператору.И только когда сервер отвечает, вы вводите функцию обратного вызова, которую вы передали в функцию http.post ().В первом случае вы выполняете оператор console.log, когда получаете ответ от сервера.Во втором случае ваш console.log () будет выполнен сразу после выполнения http-вызова, но до того, как вы получите ответ от сервера.

0 голосов
/ 22 мая 2018

Попробуйте:

http звонки asynchronous, вам нужно написать console.log в подписке, чтобы напечатать response.

getCategory() {
   this.http.post(this.apiUrl, {}).subscribe(res => {
     this.response = res['result']['data'];
     console.log(this.response);//<------This Will Work
    });
}
0 голосов
/ 22 мая 2018

Способ работы subscribe не зависит от того, где вы размещаете console.log.Причина, по которой вы испытываете это, связана с асинхронным характером операции, выполняемой кодом.

getCategory() - это функция, которая переносит вызов http, поэтому вам необходимо подписаться на возвращаемое значение.Подписка по существу означает:

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

Следовательно, размещение console.log вне подписки означает, что оно будет выполнено до асинхронногооперация завершена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...