变量无法接收数据

时间:2018-07-10 08:04:51

标签: typescript

我有一个trainee.service.ts文件,其代码如下所示

import { Injectable } from '@angular/core';
import { WebApiService, API_CMD } from "../../../theme/";
import { Observable } from "rxjs/Observable";
import { Trainee } from './trainee';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';
import 'rxjs/add/operator/do';

@Injectable()
export class TraineeDataService {

trainee: Trainee[];
constructor(private webApi: WebApiService) {

}

getTrainee(): Trainee[] {
    console.log(this.trainee);
    return this.trainee;
}

getAllTrainee():void{
let url = API_CMD.GET_ALL_TRAINEE;
this.webApi.getData(url)
  .subscribe(res=>{
    this.trainee = res.json();
    console.log(this.trainee);
});
}

}}

每当我在其他地方调用this.getTrainee()时,此处的trainee变量在方法中都是未定义的,但是console.log(this.trainee)中的getAllTrainee()确实会显示数据。我不知道为什么吗?

1 个答案:

答案 0 :(得分:0)

代码

trainee: Trainee[];

只是类型转换属性受训者,没有为其设置值,因此在调用函数之前,它是未定义的。

如果要定义为以下内容

trainee: Trainee[] = [];

然后默认值为空白数组。

如果您在最终调用** getAllTrainee **之前调用 getTrainee 函数,则受训者的值将是不确定的,但是如果在调用之后调用 getTrainee 函数订阅操作已由功能 getAllTrainee 完成,那么它不是不确定的,而是响应的值。

this.trainee = res.json(); //you have now assigned a value to trainee
console.log(this.trainee); //now it will not be undefined but will be the value you have fetched from API.