У меня проблема с синхронизацией Angular IO. У меня есть код:
private getPeople(serachOption: number, serachText: string): void{
if (serachOption == 0){
this.service.getPeopleNome(serachText)
.subscribe((response)=> {
this.limparCampos();
if (response != null){
this.People = response;
}
}, (erro)=> {
console.info(erro);
});
}else if (serachOption == 1){
this.service.getPeopleCpf(serachText)
.subscribe((response)=> {
this.limparCampos();
if (response != null){
this.People.push(response);
}
}, (erro)=> {
console.info(erro);
});
}else if (serachOption == 2){
this.service.getPeopleSus(serachText)
.subscribe((response)=> {
this.limparCampos();
if (response != null){
this.People.push(response);
}
}, (erro)=> {
console.info(erro);
});
}
if (this.People == undefined){
Console.log("List Empty");
}
}
У меня есть звонки в мои службы согласно моему варианту поиска. Но даже если это принесет результаты, приложение всегда будет отображать сообщение «Список пуст». Я теперь, что причина в асинхронности, но я не знаю, как я это исправлю.



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


Причина, по которой это не работает, действительно заключается в асинхронном вызове сервисных функций.
вам, вероятно, следует передать дополнительный параметр в свою функцию getPeople, который будет функцией обратного вызова. вы должны затем вызвать эту функцию обратного вызова после того, как получите данные от вашей службы. Там вы можете вернуть свой массив this.people в качестве параметра функций обратного вызова.
Просто удали это
if (this.People == undefined){
Console.log("List Empty");
}
если вы хотите зарегистрировать, что this.People содержит значения, вы должны регистрироваться после этого кода или в состоянии else
if (response != null){
this.People = response;
}
Для информации: вы никогда не знаете, что this.People - это undefined или null, поэтому вам просто нужно добавить такую проверку
if (!this.People){
Console.log("List Empty");
}
Просто переместите этот чек в соответствующий
subscribe.