为什么我在JavaScript的控制台中无法定义

时间:2018-07-08 07:16:09

标签: javascript html api asynchronous

我已经创建了一个名为weather的类,该类从API获取天气数据(我正在使用openWeather来获取我的天气数据)。另外,我还在另一个文件中创建了一个app.js方法,该方法将天气数据输出到控制台。

但是,每当我运行该程序时,它都会在控制台中(正好在(app.js)中)显示一条错误消息,提示 undefined 。 我正在使用javascript promise和async函数。

请帮助!谢谢!

//This is the weather class

    class Weather {
    constructor (city){
        this.apiKey = '59fdf0cfa3f226ec087ef1dec6a1755a';
        this.city = city
       // this.state = state
    }
    //fetch weather from API
    async getWeather(){
        const response = await fetch (`https://samples.openweathermap.org/data/2.5/weather?
        q=${this.city},uk&appid=${this.apiKey}.json`);

        const responseData = await response.json();

        return responseData.current_observation;
    }
    //Change weather location

    changeLocation(city,state){
        this.city = city;
        this.state = state;
    }
}

这是app.js方法

    const weather = new Weather('london');
     weather.getWeather()
    .then(results => {
       console.log(results); //this is where i get the undefined error message in the console.
    })
    .catch(err => console.log(err));
}

1 个答案:

答案 0 :(得分:0)

两个问题:

  1. 在复制和粘贴时,您的查询在问号后和字母“ q” 之前还有很多空格,不知道这也是您如何运行代码的。如果您使用的是模板文字,反引号`,而您要移至下一行,那将是一个问题。
  2. 您不想获取不存在的属性current_observation,而想要获取weatherweather[0],因为此属性包含天气数据。

同时解决这两个问题会使您无法在自己的undefined中加入console.log