Javascript API Google People - хранить имя в качестве переменной - PullRequest
0 голосов
/ 29 января 2019

У меня проблема с сохранением вызова API Google в качестве переменной.Я считаю, что это связано с тем фактом, что переменная вызывается в функции обещания, которая, как я понимаю, не передается глобальной переменной после ее выполнения.Результатом текущего кода является 'null', который является начальным значением переменной.

Я удалил большую часть кода, чтобы показать необходимый фрагмент:

var MyApp {
   name: null
};

function makeApiCall() {
     gapi.client.people.people.get({
       'resourceName': 'people/me',
       'requestMask.includeField': 'person.names'
     }).then(
       function(resp) {
       MyApp.name = resp.result.names[0].givenName;
       return MyApp.name;
     });
}

function getIP(json) {
    makeApiCall();          
    var person = MyApp.name;
    document.write(person);
}

В основномЯ хотел бы, чтобы значение MyApp.name (глобальная переменная, созданная ранее в скрипте) изменилось с «null» на ответ API, так что значение, напечатанное в getIP (json), имеет значение nameName вместо null, которое является моим текущимвыход.

Другими словами, когда я ссылаюсь на MyApp.name в функции getIP (json), он должен ссылаться на «resp.result.names [0] .givenName» вместо «null».

Я какое-то время искал по этой теме, но не добился успеха, не зная, что не работает.

1 Ответ

0 голосов
/ 29 января 2019

Делая это:

makeApiCall();          
var person = MyApp.name;
document.write(person);

Вы говорите Javascript, чтобы поставить в очередь вызов API Google, а затем немедленно использовать результат, прежде чем ждать завершения запроса.

Кроме того, вы должныне используйте document.write, потому что он заменит весь документ содержимым вашей переменной, поскольку он будет вызван после того, как документ будет обработан.

Попробуйте вместо этого:

gapi.client.people.people.get({
  'resourceName': 'people/me',
   'requestMask.includeField': 'person.names'
}).then(
  function(resp) {
    MyApp.name = resp.result.names[0].givenName;
    //Use MyApp.name here and don't use document.write
  });
...