Estoy tratando de recuperar datos meteorológicos de una API mediante un script de JavaScript en el lado del cliente. Así es como se ve el código:
<script> async function fetchWeatherData(){ var url = "http://www.7timer.info/bin/api.pl?lon=-3.57&lat=40.49&product=astro&output=json"; var weather_data = await fetch(url); var weather_json = await weather_data.json(); return weather_json.dataseries[0].temp2m; } document.write(await fetchWeatherData()); </script>Desafortunadamente, este código no funciona como esperaba. Un Node.JS/Express muy similar funciona muy bien en el lado del servidor:
export async function getTemperature(iata){ let latLong = latLongAirports.find(el => el.iata === iata); var url = "http://www.7timer.info/bin/api.pl?lon=" + latLong.long + "&lat=" + latLong.lat + "&product=astro&output=json" const response = await fetch(url); const jsonTemperature = await response.json(); return jsonTemperature.dataseries[0].temp2m; }¿Qué me falta o no entiendo entre los códigos del lado del cliente/servidor?
el problema es que no puede usar " asincrónico de nivel superior " en las etiquetas de script normales. debe declarar su etiqueta de secuencia de comandos como type="module" . Entonces funcionará como lo esperas.
<script type="module"> async function fetchWeatherData(){ var url = "http://www.7timer.info/bin/api.pl?lon=-3.57&lat=40.49&product=astro&output=json"; var weather_data = await fetch(url); var weather_json = await weather_data.json(); return weather_json.dataseries[0].temp2m; } document.write(await fetchWeatherData()); </script>