Я пишу код на 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.
Нужна помощь в обработке этого ответа.
Как сказал @fatemefazli, вы разместили console.info не в том месте. Поместите его в тело подписки.
Возможный дубликат Как мне вернуть ответ от асинхронного вызова?
Конечно, это не определено. Строка http get возвращается немедленно, а строка журнала консоли запускается сразу же после этого. После получения данных появляется строка назначения (после выполнения вышеупомянутых строк)
Это все еще проблема или вы решили проблему?
Спасибо. Теперь я понял, как это работает.

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