角度服务承诺

时间:2017-06-19 08:16:49

标签: angular

我已经创建了一个从服务器获取数据的服务,但我无法弄清楚如何在我的控制器中检索已解析的数据。

这是服务:

export class UserService {

    getUsers() {
      let data = [];
      return fetch('http://localhost:8000/api/users')
            .then(function(response) {
              console.log(response); //Response gets logged
              response.json();
            })
            .then(function(data) {
                console.log(data);  //Data gets logged
                return data;

            })
        };
    ...

在组件/控制器

export Class UserComponent implements OnInit {
  users: any[];

  constructor(private userService: UserService) {}

  ngOnInit() {
    this.users = this.userService.getUsers();
  }
}

我想这个问题与我返回功能" fetch"本身而不是已解决的数据。但我无法弄清楚正确的方法。

2 个答案:

答案 0 :(得分:2)

也许你需要这样的东西:

export class UserService {

    getUsers() {
      return fetch('http://localhost:8000/api/users')
        .then(function(response) {
           console.log(response);
           return response.json();
        });
    }
}

在您的组件中:

export class UserComponent implements OnInit {
  users: any;

  constructor(private userService: UserService) {}

  ngOnInit() {
    this.users = this.userService.getUsers();
  }
}

在模板中使用async管道:

<div *ngFor="let user of users | async">
  <span>Maybe print username: {{user.name}}</span>
</div>

如果您不想使用async管道:

组件中的代码:

export class UserComponent implements OnInit {
  users: any;

  constructor(private userService: UserService) {}

  ngOnInit() {
    this.userService.getUsers().then(data => {
      // do something with response data
      console.log(data);
      this.users = this.someMethodToTransformResponse(data);
    });
  }
  someMethodToTransformResponse(data) {
    // return modification your data
  }
}

和你的模板:

<div *ngFor="let user of users">
  <span>Maybe print username: {{user.name}}</span>
</div>

答案 1 :(得分:1)

我们在承诺内部缺少回复响应json。

export class UserService {

    getUsers() {
      let data = [];
      return fetch('http://localhost:8000/api/users')
            .then(function(response) {
              console.log(response); //Response gets logged
              return response.json();
            })
            .then(function(data) {
                console.log(data);  //Data gets logged
                return data;

            })
        };
    ...

getUsers服务是Ajax调用,因此将结果放在其中。

export Class UserComponent implements OnInit {
  users: any[];

  constructor(private userService: UserService) {}

  ngOnInit() {
    this.userService.getUsers().then(users => {
        this.users = users;
    });
  }
}