我正在使用Angular 5并希望在订阅服务后以json格式从函数getDionaeaResults返回数据
getDionaeaResults(sql) : any {
this.dionaeaService.getDionaeaConnectionLogs(sql).subscribe(res => {
this.data = res;
}),
(error: any) => {
console.log(error);
});
return this.data;
}
调用此函数后,this.totalAttacks
打印undefined。
getTotalAttack() {
this.totalAttacks = this.getDionaeaResults("some query")
console.log(this.totalAttacks,'attacks')
}
答案 0 :(得分:1)
this.getDionaeaResults
正在返回undefined
,因为您调用的服务是异步的,您必须等待订阅回调。因为Observables是异步调用
this.data=res
可能在return语句之后执行。您可以直接在dionaeaService
函数内调用getTotalAttack()
,如下所示:
getTotalAttack(sql){
this.dionaeaService.getDionaeaConnectionLogs(sql).subscribe(res => {
this.totalAttacks = res;
}),
(error: any) => {
console.log(error);
});
}
答案 1 :(得分:1)
建议使用Obseravable .map()函数。
getDionaeaResults(sql) : Observable<any> {
return this.dionaeaService
.getDionaeaConnectionLogs(sql)
.map(res => res);
}
getTotalAttack(sql){
this.getDionaeaResults("some query")
.subscribe(
res => { this.totalAttacks = res; },
err => { console.log(err); }
);
}