React-Native динамически изменяет URL выборки

1

У меня есть мобильное приложение, которое использует облачный сервер или локальный сервер для предоставления информации.

В моем App.js у меня есть:

helperUtil.apiURL().then((url) => { 
  global.API_URL = url;
})

Функция делает что-то вроде:

export async function apiURL() {

  try {
    var local = await AsyncStorage.getItem('local')
    local = (local === 'true')

    if(typeof local == 'undefined') return "https://api.website.com";
    else if(!local) return "http://192.168.0.6:8080";
    else return "https://api.website.com";
  }
  catch(err) {
    return "https://api.website.com";
  }

}

Тогда моя команда извлечения будет:

fetch(global.API_URL+'/page', { 
  method: 'GET', 
  headers: { 'Content-Type': 'application/json', 'Authorization': 'Bearer '+this.state.authtoken },
})

Я сталкиваюсь с проблемами здесь, где API_URL заканчивается неопределенным, поэтому я чувствую, что может быть лучшее решение для этого.

Открыты для любых предложений. Спасибо.

  • 0
    Я хотел бы как-то установить URI в переменной окружения, чтобы потом можно было загружать / импортировать его в код. Раньше этого не делали, но, похоже, есть много предложений о том, как с этим справиться: например, здесь и здесь . удачи
Теги:
react-native

1 ответ

0
Лучший ответ

При установке URL-адреса в глобальном объекте всегда используется метод, который возвращает Promise, и он вернет ваш глобальный объект, если он существует, а если нет, получит данные из функции apiURL. При использовании синтаксиса async/await выборка будет выполняться только тогда, когда обещание getAPI будет разрешено, и не будет ситуации, когда URL-адрес будет пустым.

const getAPI = () => {
    return new Promise((resolve, reject) =>{
         if(global.API_URL) {
              resolve(global.API_URL)
         } else {
              helperUtil.apiURL().then((url) => { 
                  global.API_URL = url;
                  resolve(url)
              })
         }

});


const fetchFunc = async () => {
   const url = await getAPI()

   fetch(url+'/page', { 
      method: 'GET', 
      headers: { 'Content-Type': 'application/json', 'Authorization': 'Bearer 
      '+this.state.authtoken },
    })
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню