我对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.log(erro);
});
}else if(serachOption == 1){
this.service.getPeopleCpf(serachText)
.subscribe((response)=> {
this.limparCampos();
if(response != null){
this.People.push(response);
}
}, (erro)=> {
console.log(erro);
});
}else if(serachOption == 2){
this.service.getPeopleSus(serachText)
.subscribe((response)=> {
this.limparCampos();
if(response != null){
this.People.push(response);
}
}, (erro)=> {
console.log(erro);
});
}
if(this.People == undefined){
Console.log("List Empty");
}
}
根据我的搜索选项,我有一些服务呼叫。 但是,即使它带来了结果,该应用程序也将始终显示“列表为空”消息。我现在的原因是异步的,但是我现在不知道如何解决这个问题。
答案 0 :(得分:0)
不起作用的原因确实是服务函数的异步调用。
您可能应该在getPeople函数中传递一个附加参数,该参数将是一个回调函数。您应该从服务中获取数据后再调用此回调函数。在那里,您可以将this.people数组作为回调函数的参数返回。
答案 1 :(得分:0)
只需删除此
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");
}