Независимо от того, где вы хотите получить данные, вам сначала нужно понять, как javascript обрабатывает асинхронный код (и что это значит для ВАС, разработчика), потому что $. GetJSON является асинхронным и выполняет что-то вроде return role
не будет ничего полезного в вашем обычном представлении о том, как функции возвращают значения.Недавно было введено await / async , которое пытается абстрагировать большую часть этого кода.Однако это также связано с некоторыми оговорками.Я бы использовал async / await, чтобы сделать все намного проще.Я бы использовал fetch:
async function getUserRole (userEmail) {
const response = await fetch(url);
const json = await response.json();
let role;
json.forEach(user => {
if(user.email === userEmail) {
role = user.role;
}
}
return role;
}
Из-за ключевого слова await
перед fetch
и response.json()
движок javascript не будет перемещаться на следующую строку, даже если это асинхронные вызовы.Это заставляет код вести себя так, как вы ожидаете.Затем, после получения данных json, мы можем перебрать каждый элемент с помощью функции массива forEach
и установить роль на основе переданного в userEmail
.Заметьте, однако, что вы видите объявление async
перед функцией?Это требуется каждый раз, когда вы используете await.Это означает, что вам также необходимо украсить функцию, которая вызывает getUserRole
, с помощью async
.