Return 订阅后 json 中的数据
Return data in json after subscribe
我正在使用 Angular 5 并希望在订阅服务
后 return 函数 getDionaeaResults 中的 json 格式的数据
getDionaeaResults(sql) : any {
this.dionaeaService.getDionaeaConnectionLogs(sql).subscribe(res => {
this.data = res;
}),
(error: any) => {
console.log(error);
});
return this.data;
}
调用此函数后,this.totalAttacks
打印未定义。
getTotalAttack() {
this.totalAttacks = this.getDionaeaResults("some query")
console.log(this.totalAttacks,'attacks')
}
this.getDionaeaResults
正在 returning undefined
因为您调用的服务是异步的,您必须等待订阅回调。因为 Observables 是异步调用
this.data=res
可能会在 return 语句之后执行。您也许可以直接在 getTotalAttack()
函数中调用 dionaeaService
,如下所示:
getTotalAttack(sql){
this.dionaeaService.getDionaeaConnectionLogs(sql).subscribe(res => {
this.totalAttacks = res;
}),
(error: any) => {
console.log(error);
});
}
建议使用 Observable .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); }
);
}
我正在使用 Angular 5 并希望在订阅服务
后 return 函数 getDionaeaResults 中的 json 格式的数据getDionaeaResults(sql) : any {
this.dionaeaService.getDionaeaConnectionLogs(sql).subscribe(res => {
this.data = res;
}),
(error: any) => {
console.log(error);
});
return this.data;
}
调用此函数后,this.totalAttacks
打印未定义。
getTotalAttack() {
this.totalAttacks = this.getDionaeaResults("some query")
console.log(this.totalAttacks,'attacks')
}
this.getDionaeaResults
正在 returning undefined
因为您调用的服务是异步的,您必须等待订阅回调。因为 Observables 是异步调用
this.data=res
可能会在 return 语句之后执行。您也许可以直接在 getTotalAttack()
函数中调用 dionaeaService
,如下所示:
getTotalAttack(sql){
this.dionaeaService.getDionaeaConnectionLogs(sql).subscribe(res => {
this.totalAttacks = res;
}),
(error: any) => {
console.log(error);
});
}
建议使用 Observable .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); }
);
}