将数据从服务器设置为类的属性angular 2

时间:2017-11-01 14:48:37

标签: angular observable angular-promise angular-http

我想将数据从observable设置为属性。但回复的反应需要时间。所以属性设置为undefined。如何将数据从服务器设置为类属性

  ngOnInit() {
    this.comics.getChar().subscribe((responses: Response) => this.data = responses[1].json().data.results);
    this.comicsList = this.data; // gives undefined
    console.log(this.comicsList);
  }

1 个答案:

答案 0 :(得分:1)

您不了解异步函数的运行方式。

这一行:

this.comics.getChar().subscribe((responses: Response) => this.data = responses[1].json().data.results);

没有"完成"在进入这一行之前:

this.comicsList = this.data; // gives undefined

第一行BEGINS执行,然后下一行立即执行,无论第一行是否完成。这是异步执行的本质,你不知道什么时候会完成,所以其他所有不依赖它的东西都会继续执行。但是,在这种情况下,您的第二行明确取决于响应,因此您需要对其进行设置,以便仅在您获得响应后才会运行:

this.comics.getChar().subscribe((responses: Response) => {
    this.data = responses[1].json().data.results;
    this.comicsList = this.data;
});

这有点多余,除非你有理由维护这个列表的两个引用,我可能只是直接在订阅中设置comicsList。

虽然我可能不会这样做,但我这样做:

this.comicsList$ = this.comics.getChar().map(responses => responses[1].json().data.results);

在我需要此数据的模板中,我订阅了异步管道。

<div *ngFor="let comic of comicsList$ | async">{{ comic }}</div>