Я получил JSON из googlespreasheet, и мне нужно передать некоторые переменные в функцию JS - PullRequest
0 голосов
/ 27 апреля 2019
$.getJSON(url, function(json) {
  for (var i in json) {
    if (json[i].emaill == userMail) {
      role = data[i].role
    }
  }
  return role
});

мне нужно передать переменную роли в другую функцию

Ответы [ 2 ]

0 голосов
/ 27 апреля 2019

$. GetJSON (url,
[data],
[callback] // Делайте что хотите) Обработайте роль в callback

0 голосов
/ 27 апреля 2019

Независимо от того, где вы хотите получить данные, вам сначала нужно понять, как 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.

...