【问题标题】:Undefined data when parsing outside async function in Angular在Angular中解析外部异步函数时未定义的数据
【发布时间】:2020-06-18 04:58:16
【问题描述】:

当我想解析来自 http 调用的数据并将其解析为 ngOnInit 时,我遇到了困难。你能帮我解决这个问题吗?我正在使用 Angular 4。

异步函数:

async getAsyncData() {
      this.asyncResult = await this.serviceDashboard.getAllGeografika().toPromise().then(data => {
        return data.length;
      });
      return this.asyncResult;
}

ngOnInit 我要打印数据的地方:

ngOnInit() {
      console.log('Halo from ngOnInit');
      console.log('print data :' +  this.getAsyncData();
}

【问题讨论】:

    标签: javascript angular async-await dom-events angular-promise


    【解决方案1】:

    你不是在等待你的函数的承诺,所以这个:

     console.log('print data :' +  this.getAsyncData();
    

    正在记录承诺,而不是承诺的已解决值

    您至少可以通过三种方式解决此问题:

    1。使用异步/等待

    async ngOnInit() {
      console.log('Halo from ngOnInit');
      const data = await this.getAsyncData();
      console.log('print data :' + data);
    }
    
    async getAsyncData() {
      const data = await this.serviceDashboard.getAllGeografika().toPromise();
      return data.length;
    }
    

    这种违反了OnInit的合同,但你可以逃脱惩罚。

    2。兑现承诺

    这可能是比上一个更纯粹的形式,但你可能不喜欢它的冗长。

    ngOnInit() {
      console.log('Halo from ngOnInit');
      this.getAsyncData().then(data => {
          console.log('print data :' + data);
      });
    }
    
    async getAsyncData() {
      const data = await this.serviceDashboard.getAllGeografika().toPromise();
      return data.length;
    }
    

    3。使用 RxJS

    我的首选。

    ngOnInit() {
      console.log('Halo from ngOnInit');
      this.getAsyncData().subscribe(data => {
          console.log('print data :' +  data.length);
      });
    }
    
    getAsyncData(): Observable<any> {
      return this.serviceDashboard.getAllGeografika();
    }
    

    【讨论】:

    • 它有效,但是当我将它解析为我的 html 图表时,为什么它们显示一个没有数据的空白。异步 ngOnInit() { console.log('来自 ngOnInit 的光环');常量数据 = 等待 this.getAsyncData(); this.emailChartType = ChartType.Pie; this.emailChartData = { 系列:[数据,数据,数据] }; }
    • 这听起来像是一个无关的问题。
    • 我刚刚意识到getAsyncData 也应该被修改。我已经编辑了我的答案。
    • 在第 1 个答案中。它显示错误Property 'length' does not exist on type 'Observable&lt;Koleksi[]&gt;'.
    • 所以你试图等待一个可观察的?
    猜你喜欢
    • 2016-03-30
    • 2020-06-19
    • 1970-01-01
    • 2019-10-03
    • 2018-08-15
    • 2016-06-04
    • 2016-05-10
    • 2019-09-03
    • 2018-05-29
    相关资源
    最近更新 更多