订阅后在json中返回数据

时间:2018-04-10 17:13:45

标签: service promise return angular5 observers

我正在使用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')
}

2 个答案:

答案 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); }
  );
}