Я получаю это только тогда, когда подписываюсь на функцию, которая вызывает вызов API из службы Angular, поэтому объект, который подписывается на функцию, пуст. Вот мой фрагмент кода из моего сервиса:
getSchedules(): Observable<Schedule[]> {
this.http.get<TempSchedules[]>(this.apiUrl).subscribe(x => this.temp = x);
this.temp.forEach((e, i) => {
// Do something, this loop is never executed because this.temp is empty
});
// Some processing here
return something; }
Вот моя функция http.get где-то внутри службы:
getTempSchedules(): Observable<TempSchedules[]> {
return this.http.get<TempSchedules[]>(this.apiUrl);
}
Из приведенного выше, this.temp пуст. Это почему?
Я вызвал вышеуказанную функцию в конструкторе службы как
constructor(private http:HttpClient) {
this.getTempSchedules().subscribe(x => this.temp = x);
}
Вот фрагмент кода из компонента, который вызывает эту функцию в службе:
ngOnInit(): void {
this.scheduleService.getTempSchedules().subscribe(x => this.tempSchedules = x);
}
Компонент работает нормально, поэтому, когда я использую значение this.tempSchedules в html, оно отображается правильно. Что мне здесь не хватает?
Спасибо @Drenai, это другое. я уже подписался и не использовал пайп в своем квестино



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Это не работает, потому что вы не понимаете, как работает наблюдаемое. Это асинхронный процесс, и вам нужно быть в блоке подписки, чтобы получить его. Если вы хотите сделать что-то необычное с ответом, прежде чем вернуть его компоненту, вам следует использовать map
getTempSchedules(): Observable<Schedule[]> {
return this.http.get<TempSchedules[]>(this.apiUrl)
.pipe(map(res => {
return res.forEach(() => {
// Do something, this loop will be executed
})
})) }
используйте его в компоненте как:
ngOnInit(): void {
this.scheduleService.getTempSchedules().subscribe(x => this.tempSchedules = x);
}
Спасибо @Shashank. У меня есть эта дилемма. При зацикливании res.forEach((e) => { var day = dd.getDay(); var {index, length} = this.getSlotNumber(e.startTime.hours, e.startTime.minutes, e.endTime.hours, e.endTime.minutes); this.arr[day].times[index] = length; for (var k = index; k<=length+index-1; k++) { console.info(day + ' cc ' + k) this.arr[day].assigned[k] = true; }, когда день = 1, цикл for фактически присваивает значение true для назначенного массива во все дни. где день = от 0 до 6. Любая идея, если это связано?
@ Уильям Нет, это не связано. Трудно сказать, если я не знаю больше об этой петле. Может быть еще одна проблема
Отвечает ли это на ваш вопрос? Angular HttpClient объединяет канал, нажмите с подпиской?