Переход к асинхронной функции

#javascript #debugging #async-await #asynchronous-javascript

#javascript #отладка #async-ожидание #асинхронный-javascript

Вопрос:

Я пытаюсь извлечь данные из API и столкнулся с проблемой. Функция fetchCountryData не помогает отладить проблему, поскольку любые точки останова внутри нее игнорируются. Как мне перейти к асинхронной функции?

 const [countryData, setCountryData] = React.useState([]);
const [borderCountries, setBorderCountries] = React.useState([]);

React.useEffect(() => {
    fetchCountryData();
}, [])

async function fetchCountryData() {
    /* fetch country by Name */
    const response = await 
        fetch(`https://restcountries.eu/rest/v2/name/${match.params.country}
               ?fields=${URL_FIELD_QUERIES}`);

    const fetchedData = await response.json();
        
    /* check if query by name returned multiple countries (the api unwillingly does that for some countries!) */
    let index = fetchedData.length === 1
                    ?   0   :   filterRequiredCountry(fetchedData, match.params.country);

    setCountryData(fetchedData[index]);

        
    /* .map() will run 'fetchNeighborName' function for each borders' item */
    const promises = fetchedData[index].borders.map(fetchNeighborName);

    /* the above promises will be resolved by Promise.all() */
    const neighborNames = await Promise.all(promises);

    setBorderCountries(neighborNames);
}

/* Extract 'alphaCode' for each bordered country and fetch its real name */

async function fetchNeighborName(alphaCode) {
    return fetch(`https://restcountries.eu/rest/v2/alpha/${alphaCode}?fields=name`)
        .then(response => response.json())
        .then(data => data.name);
}

function filterRequiredCountry(fetchedData, requiredCountry) {
    let requiredIndex;

    for (let index = 0; index < fetchedData.length; index  ) {

        if (fetchedData[index].name === requiredCountry.toLowerCase()) {
            requiredIndex = index; break;
        }
    }
}
  

Комментарии:

1. Просто любопытно, почему это fetchNeighborName определено внутри fetchCountryData ?

2. Кроме того, попробуйте использовать debugger; инструкцию?

3. привет, спасибо! Я только что прочитал о debugger инструкции в mdn. Это сработало!

4. Я рад, что это сработало! Странная настройка точек останова не работает…

5. В async function s нет ничего особенного, из-за чего точки останова не работали бы.