@nevantain

Почему я получаю ответ с API со второго раза?

Я делаю небольшое приложение показывающее погоду, мне нужно сделать запрос на API, первый запрос нужно сделать на координаты набраного пользователем города, а второй на погоду по этим координатам:

import express from 'express';
import axios from 'axios'

const app = express();

const PORT = 4444 | process.env.PORT;

// FETCHES ==========================================================================================

let fetchData = {
    urlGeo: 'http://api.openweathermap.org/geo/1.0/direct',
    urlCurrent: 'http://api.openweathermap.org/data/2.5/weather',
    urlTomorrow: 'http://api.openweathermap.org/data/2.5/forecast',
    token: '',
    lat: '',
    lon: ''
}

let today = {};

async function requestWeather(a, b) {
    const res = await axios.get(fetchData.urlCurrent+`?lat=${a}&lon=${b}&lang=ru&units=metric&appid=${fetchData.token}`)
    today = res.data;
}

async function requestGeo(search) {
    const res = await axios.get(fetchData.urlGeo+`?q=${search}&appid=${fetchData.token}`)
    fetchData.lat = await res.data[0].lat;
    fetchData.lon = await res.data[0].lon;
    requestWeather(fetchData.lat, fetchData.lon);
}


// SERVER ==========================================================================================



app.get('/city/:name', (req, res) => {
    requestGeo(req.params.name);
    res.send(today);
});

app.listen(PORT, (req, res) => {
    console.log(`Server work: http://localhost:${PORT}/`)
})


Но случается странная проблема, когда делаешь запрос 1 раз ответ приходит, но не обновляются данные в объекте, на втором запросе тоже все нормально и данные в объекте обновляются, но так быть не должно, почему так происходит? 100 раз переделывал уже, всяко пытался, опыта не хватает видимо.
  • Вопрос задан
  • 149 просмотров
Решения вопроса 1
wapster92
@wapster92 Куратор тега JavaScript
app.get('/city/:name', async (req, res) => {
    await requestGeo(req.params.name);
    res.send(today);
});

почему так происходит?

app.get('/city/:name', (req, res) => {
    requestGeo(req.params.name); // ушло в промис
    res.send(today); // не дожидается завершения промиса 
});
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы