Vengo de un fondo de Python y ahora estoy aprendiendo JavaScript, creo que tengo algunos conceptos confundidos con respecto a los valores devueltos después de que se resuelve una promesa. Tengo un script simple que recopila datos meteorológicos de OpenWeatherMap usando Axios.
Dada la siguiente función, usar console.log() me da el resultado correcto:
const axios = require('axios'); const apiKey = process.env.OPEN_WEATHER_MAP_API_KEY; let getWeather = (zip) => { const url = `https://api.openweathermap.org/data/2.5/weather?zip=${zip},au&units=metric&appid=${apiKey}`; axios.get(url) .then((resp) => { const name = resp.data.name; const temp = parseFloat(resp.data.main.temp.toFixed(1)); console.log(`The weather in ${name} is ${temp} degrees`); }); }; getWeather('2000'); Ejecutar el código devuelve The weather in Sydney South is 21 degrees .
Sin embargo, si modifico el código para que se devuelva la cadena después de la promesa en lugar de console.log(), obtengo undefined :
const axios = require('axios'); const apiKey = process.env.OPEN_WEATHER_MAP_API_KEY; let getWeather = (zip) => { const url = `https://api.openweathermap.org/data/2.5/weather?zip=${zip},au&units=metric&appid=${apiKey}`; axios.get(url) .then((resp) => { const name = resp.data.name; const temp = parseFloat(resp.data.main.temp.toFixed(1)); return `The weather in ${name} is ${temp} degrees`; }); }; myWeather = getWeather('2000'); console.log(myWeather); Ejecutar el código devuelve undefined .
¿Puede alguien indicarme la dirección correcta de lo que salió mal?