Service 订阅后返回json格式的数据

Service 订阅后返回json格式的数据,service,promise,return,angular5,observers,Service,Promise,Return,Angular5,Observers,我正在使用Angular 5,并希望在订阅服务后以json格式从函数GetDionareaResults返回数据 getDionaeaResults(sql) : any { this.dionaeaService.getDionaeaConnectionLogs(sql).subscribe(res => { this.data = res; }), (error: any) => {

我正在使用Angular 5,并希望在订阅服务后以json格式从函数GetDionareaResults返回数据

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.getDionareaResults
正在返回
undefined
,因为您调用的服务是异步的,您必须等待subscribe回调。因为可观察对象是异步调用

this.data=res 
可能在return语句之后执行。您可以直接在
getTotalAtack()
函数中调用
dionaeaService
,如下所示:

getTotalAttack(sql){
   this.dionaeaService.getDionaeaConnectionLogs(sql).subscribe(res => {
      this.totalAttacks = res;
    }),
    (error: any) => {
            console.log(error);
    });
 }

this.getDionareaResults
正在返回
undefined
,因为您调用的服务是异步的,您必须等待subscribe回调。因为可观察对象是异步调用

this.data=res 
可能在return语句之后执行。您可以直接在
getTotalAtack()
函数中调用
dionaeaService
,如下所示:

getTotalAttack(sql){
   this.dionaeaService.getDionaeaConnectionLogs(sql).subscribe(res => {
      this.totalAttacks = res;
    }),
    (error: any) => {
            console.log(error);
    });
 }

建议使用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); }
  );
}
GetDionareaResults(sql):可观察{
退回这个。DionaAservice
.getDionaeaConnectionLogs(sql)
.map(res=>res);
}
getTotalAttack(sql){
this.getDionareaResults(“一些查询”)
.订阅(
res=>{this.totalAttacks=res;},
err=>{console.log(err);}
);
}

建议使用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); }
  );
}
GetDionareaResults(sql):可观察{
退回这个。DionaAservice
.getDionaeaConnectionLogs(sql)
.map(res=>res);
}
getTotalAttack(sql){
this.getDionareaResults(“一些查询”)
.订阅(
res=>{this.totalAttacks=res;},
err=>{console.log(err);}
);
}

我使用
this.getDionaeaResults
函数作为通用函数,它可以通过传递sql查询从任何函数调用,并将得到json格式的结果,另外我在subscribe调用后返回
this.getDionaResults
中的数据。我使用
this.getDionaResults
函数作为通用函数,它可以通过传递SQLQuerry从任何函数调用,并将以json格式获得结果,另外,在subscribe调用之后,我将在
this.getDionareaResults
中返回数据。