对象中的项目在调用时未定义

Item in an object is undefined when called

所以我正在尝试制作一个天气应用程序,使用 openWeatherAPI,我需要一个位置的纬度和经度

首先,将所需位置(城市)放入地理编码 class,以便将其转换为具有城市名称、lon 和 lat 的对象。

问题是,当我使用 lon 和 lat 值时,它们显示为未定义,但是当您调用整个对象本身时,它会显示所有应有的值。

这是我的 index.js:

import Search from "./models/search";
import GeoCode from "./models/geocode";

const geocode = new GeoCode("toronto");
const weather = new Search(geocode.lat, geocode.lon);

console.log(geocode);
console.log(weather);

这是我的地理编码转换器 API 模块 (geocode.js):

import axios from "axios";

export default class Geocode{
    constructor(city){
        this.city = city;
        
        this.getLatLong();
    }

    async getLatLong(){
        try{
            const res = await axios(`https://us1.locationiq.com/v1/search.php?key=${key}&q=${this.city}&format=json`);

            this.lat = JSON.parse(res.data[0].lat);
            this.lon = JSON.parse(res.data[0].lon);
        }catch(err){
            console.log(err)
        }
    }
    
}

这是我的搜索模块,它联系 api 以使用经度和纬度 (search.js) 进行搜索:

import axios from "axios";

export default class Search{
    constructor(lat, lon){
        this.lat = lat;
        this.lon = lon;

        this.getResults();
    }

    async getResults() {
        try {
            const res = await axios(`https://api.openweathermap.org/data/2.5/onecall?lat=${this.lat}&lon=${this.lon}&%20exclude=daily&appid=${key}&units=metric`);
            this.result = res;
        }catch(error){
            alert(error);
        }
    }
}

这也是我在控制台中得到的:

Geocode {city: "toronto"}

Search {lat: undefined, lon: undefined}

改变这个:

import Search from "./models/search";
import GeoCode from "./models/geocode";

const geocode = new GeoCode("toronto");
const weather = new Search(geocode.lat, geocode.lon);

console.log(geocode);
console.log(weather);

为此:

import Search from "./models/search";
import GeoCode from "./models/geocode";

(async () => {
  const geocode = new GeoCode("toronto");
  await geocode.getLatLong();

  const weather = new Search(geocode.lat, geocode.lon);
  await weather.getResults();

  console.log(geocode);
  console.log(weather);
})();

同时从 geocode.js 中删除 this.getLatLong();,并从 search.js 中删除 this.getResults();