У меня есть мобильное приложение, которое использует облачный сервер или локальный сервер для предоставления информации.
В моем 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 заканчивается неопределенным, поэтому я чувствую, что может быть лучшее решение для этого.
Открыты для любых предложений. Спасибо.
При установке 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 },
})
}