Мне нужно закодировать компонент дерева, отображающий несколько данных, который отлично работал с фиктивными данными для меня. Проблема здесь в том, что когда я пытаюсь получить данные с серверов, позвольте мне объяснить:
У меня есть три основных объекта: районы, здания и двери. Как вы можете догадаться, «двери» относятся к идентификатору здания, а идентификатор здания - к районам. Итак, чтобы получить данные и создать свои узлы дерева, мне нужно сделать несколько http-вызовов в циклах forEach, которые не являются асинхронными.
Я не буду делиться с вами всем, кроме минимизированной проблемы, чтобы я мог легко получить помощь :
Этот метод получает массив районов с сервера и помещает его в локальный массив:
async getDistricts(){
this.districtDataService.getDistrictData().toPromise().then(async districts => {
this.districts = await districts.results as District[];
});
}
На моем ngOnInit:
ngOnInit() {
this.getDistricts().then(async () => {
console.log(this.districts);
for (const district of this.districts){
console.log(district);
}
})
Первый console.log (в NgOnInit) возвращает пустой массив, что довольно удивительно, потому что первый метод помещает данные в this.districts. и регистрация данных в первом методе сразу после того, как я их вставил, возвращает массив с моими данными. Я думаю, это как-то связано с используемым мной async / await. Может ли кто-нибудь помочь?
EDIT 1: Пытался использовать this.getDistricts (). Finally () вместо this.getDistricts (). Then (), но не сработало.
EDIT 2: console.log в getDistrict выполняется после того, что было перед моим l oop. Ожидаемое поведение было бы противоположным.
РЕШЕНО: размещение for l oop в блоке finally после того, как мой HTTP-вызов решает эту проблему. Итак, как говорится в ответе, я думаю, что перестал разрабатывать вызовы async / await. Исходя из этого, мне нужно переосмыслить свою работу. Всем спасибо!