无法更改函数内部的全局变量的值

时间:2019-11-01 17:12:28

标签: typescript ionic-framework

我在home.page.ts内部创建了一个从AirVisual API检索json的方法,并将特定数据解析到home.page.html

但是,函数()中的代码似乎没有为全局变量分配任何值。

export class HomePage {

  constructor() { }

  aqi: string;

  getAQI() {
    var value;
    var r = new XMLHttpRequest();
    r.responseType = 'json';
    r.open('GET', "http://api.airvisual.com/v2/city?city=Bang%20Rak&state=Bangkok&country=Thailand&key=30c3e5bd-32d3-4fdb-b2dd-fe36928850b5", true);
    r.onload = function () {
      var jsonResponse = r.response;
      value = parseInt(jsonResponse.data.current.pollution.aqius);
      console.log(value); // This print the value from JSON
    }
    r.send();
    console.log(value); // This print undefined in console
    this.aqi = String(value);
  }

由于未定义函数外部的value,因此aqi也未定义。因此,我无法在html页面上使用它。

1 个答案:

答案 0 :(得分:0)

您正在为.onload设置事件处理程序,但是您的getAQI函数将在r.send()之后继续本地执行并运行下一行。由于尚未发生onload并已对其进行处理,因此仍未定义。 onload()将在此之后发生。如果将断点放在onload函数内部和console.log行中,您应该会看到执行顺序。