如何通过.subscribe()

时间:2018-06-13 15:16:23

标签: angular observable

我遇到了使用Angular 5中的Observable从异步查询中获取值的困难

export class CustomComponent {
private external: any;

constructor(private http: HttpClient) {}

getContent() {
     return this.http.get('api/conten/get');
}


retrieve() {
    this.getContent().subscribe(content => {
        this.external = content;
        console.log(this.external) // here we get content that we expect
    });

    console.log(this.external); // there is 'undefined'
}

}

如何使用 getContent()的结果设置外部变量? 可能还有其他方法吗?
当我们需要在下面的代码中使用响应时,我想这种情况非常频繁 请举例说明如何在请求后立即从响应中获取值(例如,在Angular框架内进行请求同步)

1 个答案:

答案 0 :(得分:1)

你做事的方式是正确的。

您的第二个console.log打印undefined的原因仅仅是因为retrieve函数不等待您的异步操作(getContent())完成,然后再转到下一个线。

这是一个简化的时间表:

  1. 执行retrieve
  2. 执行getContent,哦,它是异步的,让我们订阅它并继续
  3. 打印this.externalundefined
  4. getContent返回时(有时候稍后),将返回的值分配给this.external
  5. 打印this.externalcorrect value