Не удается получить ответ на запрос GET Axios

#javascript #android #ios #react-native #axios

#javascript #Android #iOS #react-native #axios

Вопрос:

Я вызываю запрос GET из OpenWeather API, как показано ниже:

 const config = {
            headers: {
              accept: 'application/json',
            },
            data: {},
          };
        const url = 'http://samples.openweathermap.org/data/2.5/forecast?id=524901amp;appid=b6907d289e10d714a6e88b30761fae22';
        Axios.get(url, config).then((response) => {
            console.log(response);
        }).catch((e) => {
            Alert.alert('error', `${e}`);
            });
  

но .then() не вызывается, и примерно через 15 секунд он выдает исключение и показывает catch предупреждение (сообщающее, Network Error что в то время как другие вызовы API работают, сетевая ошибка на самом деле не проблема).

url работает в браузерах, но Axios не может выполнить этот вызов. у кого-нибудь есть идеи, что происходит?

Ответ №1:

Убедитесь, что ваш пакет NPM находится вверху:

Для Node / React:

 const axios = require('axios');

import axios from 'axios';  

Предоставленный вами код сработал для меня. Я просто установил axios, импортировал его и записал в нижнем регистре «axios» в вашем примере, и я получил ответ от службы погоды.

Я получил следующий ответ на данные JSON (с некоторыми другими материалами):

  data:
   { cod: '200',
     message: 0.0036,
     cnt: 40,
     list:
      [ [Object],
        ...
        [Object],
        [Object] ],
     city:
      { id: 524901, name: 'Moscow', coord: [Object], country: 'none' } } }  

Ответ №2:

Используйте async/await . Это упрощает чтение вашего кода и позволяет избежать ада обратного вызова.

 import axios from 'axios';
  
 const fetchData = async () => {
  const config = {
    headers: {
      accept: 'application/json',
    },
   data: {},
  };

  const url = 'http://samples.openweathermap.org/data/2.5/forecast?id=524901amp;appid=b6907d289e10d714a6e88b30761fae22';

  const response = await axios.get(url, config);
  console.log(response);
}