在构建数据之前使用HTTP GET返回的Observable的Angular 6函数

时间:2018-10-03 20:46:43

标签: angular typescript observable reactivex

我正在尝试从REST端点读取数据。读取数据后,我想构造一个实例列表并返回该列表。

但是由于HTTP GET函数返回了Observable方法,因此在根据响应构造它之前,它总是返回空列表。

这是我的代码:

 public getUsers() {
    let responseValue = this.http.get(this.utils.provideserviceURL('http://test.com/users'));

    responseValue.toPromise()
    .then(result => {
      let usersList: User[] = [];
      let jsonResult = result.json();
      for (let temp of jsonResult) {
        let tempUser = new User(jsonResult.id, jsonResult.username, jsonResult.password, jsonResult.firstName, jsonResult.lastName);
        usersList.push(tempUser);
      }
      console.log(usersList);
      return usersList;
    })
    .catch(err => {
      // Error while fetching Users
      console.log('Error');
    });

  }

此函数返回undefined,然后使用正确的数据打印控制台。

我不完全了解使用toPromise()的正确方法。如果已经讨论过该帖子,请指向我,然后将此问题重复。

2 个答案:

答案 0 :(得分:1)

这是因为在JavaScript中,您不会等到响应返回。您在回应后的行为中返回某些信息没有道理

我认为您应该将列表保存在属性中,并在组件中或要使用它的位置使用它。

public users: Users = undefined

public getUsers() {
    let responseValue = this.http.get(this.utils.provideserviceURL('http://test.com/users'));

    responseValue.toPromise()
    .then(result => {
      let usersList: User[] = [];
      let jsonResult = result.json();
      for (let temp of jsonResult) {
        let tempUser = new User(jsonResult.id, jsonResult.username, jsonResult.password, jsonResult.firstName, jsonResult.lastName);
        usersList.push(tempUser);
      }
      console.log(usersList);
      this.users = usersList;
    })
    .catch(err => {
      // Error while fetching Users
      console.log('Error');
    });

  }

答案 1 :(得分:1)

这就是我的方法(我看到toPromise已贬值),

constructor(private dataservice: DataService){}

myEmail: string = '';
myID: number = 0;

ngOnInit(){
this.dataservice.getMe()
.subscribe((data: WhoAmI) => {
  this.myEmail = data.Contacts.find(x=>x.ContactTypeName == "Email").ContactValue;
  this.myID = data.ID;
});