我正在使用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.log中获得相同的值
答案 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); });
}
}