对象中的项目在调用时未定义
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();
。
所以我正在尝试制作一个天气应用程序,使用 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();
。