При попытке использования API Javascript Google в Google+ я столкнулся с проблемой.Сохранение ответа из запроса API JavaScript JavaScript
var response;
var request = gapi.client.request({
'path': '/plus/v1/people/' + "THEUSERID",
'params': {}});
request.execute(function(resp){});
Функция execute (gapi.client.HttpRequest.execute) принимает один аргумент; функция обратного вызова. Однако я не хочу обрабатывать данные сразу после получения, я хочу сохранить их в переменной response
, указанной в начале кода. Есть ли способ использовать аргумент обратного вызова для хранения ответа?
Простите меня, если это имеет очевидное решение, я немного новичок в JavaScript.
EDIT: Было высказано предположение, что функция обратного вызова будет следующим образом:
request.execute(function(resp){response = resp;});
Однако что-то интересно, происходит с помощью функции. Вот код, который я использовал для теста:
var response;
var request = gapi.client.request({
'path': '/plus/v1/people/' + userID,
'params': {}});
request.execute(function(resp){
console.log("RESP:");
console.log(resp);
response = resp;});
console.log("RESPONSE:");
console.log(response);
Что выходы пульта выглядит следующим образом:
RESPONSE:
undefined
GET https://www.googleapis.com/plus/v1/people/104815258973759324455?key=XXXXXXX
RESP:
({theactualjsondatathatIreceivedfromthecall})
Видимо, код продолжает выполняться/до/функция обратного вызова выполнения может быть вызвана. Мне нужен способ проверить это, чтобы код после функции execute не вызывался до тех пор, пока функция обратного вызова не будет запущена.
Это должно быть сделано. OP, имейте в виду, что ваш 'response' var имеет объем функции, в которой он находится (если он в одном). Поэтому, если вам нужно использовать его вне этого, обязательно переместите объявление. – shanabus
Это должно работать, да, но, похоже, функция execute() обрабатывает обратный вызов немного иначе, чем я думал; Я отредактировал главный вопрос, чтобы отразить эту проблему. – Tanaki
Обратный вызов скорее всего асинхронный. – Ivan