Angular5: обработка ответа Json переменной

Я пишу код на Angular, где ответ JSON (массив JSON) от вызова REST должен отображаться в виде таблицы в графическом интерфейсе. Формат JSON не определен заранее, и мне нужно записать его в каком-то общем формате, а затем использовать его. Фрагмент кода выглядит следующим образом:

getResultsFromDB() {
  this.http.get('app/api/locSearchReq.json').subscribe(
    data => {
      **this.locResults = data as any;**
    },
    (err: HttpErrorResponse) => {
      console.info (err.message);
    }
  );
  console.info('Data ' + this.locResults);
}

Если я перемещаю вызов console.info в subscribe, он распечатывает полученные данные. Но я не могу получить доступ к this.locResults вне вызова подписки или вне функции.

Другие подобные функции, которые я написал, где я получаю предопределенный массив Json в качестве ответа и сопоставлен с классом машинописного текста, я могу получить доступ к данным вне функции.

  getResultItems() {
    this.http.get(this.glResultItems).subscribe(
      data => {
        this.resultItems = data as ResultItem [];    
      },
      (err: HttpErrorResponse) => {
        console.info (err.message);
      }
    );
  }

Когда я пытаюсь получить доступ к this.resultItems вне функции, я могу это сделать. Я не могу понять, что я здесь делаю не так или не так,

Данные в locSearch.json следующие:

[{
    "name": "sookshm",
    "age": "27",
    "org": "abc",
    "location": "NJ",
    "expertise": "javascript"
}, {
    "name": "Liu",
    "age": "35",
    "org": "ibm",
    "location": "NJ",
    "expertise": "css"
}, {
    "name": "Mike",
    "age": "38",
    "org": "msn",
    "location": "NY",
    "expertise": "html"
}]

В консоли браузера this.locResults отображается как undefined.

Нужна помощь в обработке этого ответа.

Попробуй поставить консоль в data => { this.locResults = data as any; console.info(this.locResults);}. В вашем коде консоль регистрирует массив до получения ответа.

Fateme Fazli 20.04.2018 22:37

Как сказал @fatemefazli, вы разместили console.info не в том месте. Поместите его в тело подписки.

Agam 20.04.2018 22:52

Возможный дубликат Как мне вернуть ответ от асинхронного вызова?

Estus Flask 20.04.2018 23:37

Конечно, это не определено. Строка http get возвращается немедленно, а строка журнала консоли запускается сразу же после этого. После получения данных появляется строка назначения (после выполнения вышеупомянутых строк)

Llama 21.04.2018 06:00

Это все еще проблема или вы решили проблему?

Lynx 242 21.04.2018 10:36

Спасибо. Теперь я понял, как это работает.

Sookshm 23.04.2018 13:58
Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
1
6
64
0

Другие вопросы по теме