Я все еще начинающий, когда дело доходит до Angular, и провел последние несколько дней в поисках решения.Я получаю доступ к API, который возвращает страницы результатов JSON в следующем формате: {"count": 242, "next": <link to the next page>, "results":[]}
Моя функция get выглядит следующим образом:
getJournals(searchterm, limit?: number, offset?: number): Observable<any> {
var endpointurl = this.globalvars.apiv1Url + "search-journal?q=" + searchterm;
if (limit != null) {
endpointurl = endpointurl + "&limit=" + limit;
}
if (offset != null) {
endpointurl = endpointurl + "&offset=" + offset;
}
return this.http.get(endpointurl).pipe(map((res: Response) => this.extractJournals(res)));
}
Функция извлечения обрабатывает результаты и рукиих на фабрику, поэтому я получаю объекты журнала, которые соответствуют моей модели данных.
private extractJournals(res: Response) {
let body: any = { count: res["count"], next: res["next"], journals: [] };
if (body["count"] > 0) {
for (var index = 0; index < res["results"].length; ++index) {
var journalInfo: any = res["results"][index];
this.journalFactory.create(journalInfo, body.journals);
}
}
return body || {};
}
Второй параметр функции create является необязательным и принимает список для отправки результатов обратно.Теперь о проблемной части.Страница, которая вызывает getJournals (объявление журнала помещает журналы в таблицу данных ngx):
getJournals(limit: number, offset: number) {
this.page.limit = limit;
this.page.offset = offset;
this.api.getJournals("", limit, offset).subscribe((result) => {
console.log(result);
this.page.count = result["count"];
if (result["count"] > 0) {
console.log(result["journals"].length);
result["journals"].forEach((currentjournal) => {
console.log(currentjournal);
var journal: any = {};
this.rows.push(journal);
});
this.rows = [...this.rows];
}
});
}
Первый консольный журнал возвращает то, что я ожидал.Я знаю, что это наблюдаемое и возвращает не то, что было внутри него в тот момент, когда оно было зарегистрировано, но оценивается, когда я нажимаю на него в браузере.Журнал содержит все мои журналы в том виде, в котором я хочу, и все в порядке.Второй журнал возвращает «0», а третий никогда не вызывается.Из того, что я понимаю, итерация работала бы, если бы моя наблюдаемая возвратила список, но это не так, потому что я хочу перебрать список, вложенный в результат (?).Также интересно то, что result ["count"] возвращает правильный результат из API в любое время, и он заполняется функцией extractJournals.Я думаю, что это означает, что extractJournals заполнил переменную body, но не ждет цикла for, прежде чем он вернет результат?Но он обрабатывает цикл for в некоторой точке, потому что первый журнал содержит результаты цикла for.
У меня действительно нет идей.Как мне заставить работать этот последний цикл forEach, поскольку он, очевидно, не ожидает заполнения списка журналов?Я также попробовал обычный цикл for с индексом кстати.