我的函数返回未定义,但内部运行良好

时间:2019-07-04 04:06:46

标签: angular typescript httpclient

我正在使用Web服务,并且很好地获取了值,但是该函数返回的是undefined:/

我一直在尝试使用异步并等待,但是我不确定。

constructor(private sessionstore: SesionStoreService, private httpClient: HttpClient) { }

  ngOnInit() {
    let data:any = this.previData();
    console.log(data);
  }



  private _datosPrevision: any;

 previData() {

    this.previsiones().subscribe(data =>{
      this._datosPrevision = data;
      console.log(this._datosPrevision);
      return this._datosPrevision;
    })

  }

  previsiones():Observable<any>{
    const urlProvisiones: string = 'http://localhost:8080/api/v1/pacientes/previsiones';

    const httpOptions2 = {
      headers: new HttpHeaders({
        'Content-Type':  'application/x-www-form-urlencoded',
        'Authorization': this.sessionstore.token
      })
    };
    return this.httpClient.get(urlProvisiones,httpOptions2);
  }

Console

我想在两个console.log中获得相同的值

3 个答案:

答案 0 :(得分:3)

  

由于它是一个异步调用,所以您不知道何时返回。

因此,如果要在 ngOnInit() 中获取数据,请将方法调用移入其中。

 ngOnInit() {
   this.previsiones().subscribe(data =>{
      this._datosPrevision = data;
      console.log(this._datosPrevision);
   })
 }

但是我认为您的代码看起来不错(至少对我而言)。

  

附言::建议在服务内而不是组件内调用您的API。

答案 1 :(得分:1)

未定义的原因:

 previData() {
    this.previsiones().subscribe(data =>{
      this._datosPrevision = data;
      console.log(this._datosPrevision);
      return this._datosPrevision;
    })
  }

previData() {...}没有返回任何内容,这就是将undefined分配给数据的原因。

this._datosPrevioson被分配了data值,这是您可以在代码中使用的值。

this.previsiones().subscribe(data =>{
      this._datosPrevision = data;  
      console.log(this._datosPrevision);
      return this._datosPrevision;
})

2种不同的数据打印方式:

您可以做的是在subscribe()内打印(您已经做过)。或者,将previsiones从可观察性转换为承诺,然后使用async/await

答案 2 :(得分:0)

  

使用服务获取数据

由于从API返回数据需要花费一些时间,因此您需要服务中有关完成作业的回调。

export class UserService {

    constructor(private http: HttpClient) {}
    previsiones():Observable<any>{
    const urlProvisiones: string = 'http://localhost:8080/api/v1/pacientes/previsiones';

    const httpOptions2 = {
      headers: new HttpHeaders({
        'Content-Type':  'application/x-www-form-urlencoded',
        'Authorization': this.sessionstore.token
      })
    };
    return this.httpClient.get(urlProvisiones,httpOptions2);
  }
}

调用如下函数:

export class UserComponent implements OnInit {
  constructor(private service: UserService) { }
  ngOnInit() {
    this.service.previsiones()
    .subscribe( data => {  console.log(data); });
  }
}