Сохранение ответа от запроса Google JavaScript API - PullRequest
4 голосов
/ 28 февраля 2012

Испытывая Google Javascript API с Google+, я наткнулся на загадку.

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. Мне нужен способ проверить это, чтобы код после функции execute не вызывался до тех пор, пока не будет запущена функция обратного вызова.

1 Ответ

6 голосов
/ 28 февраля 2012
request.execute(function(resp){
  response = resp;
  afterExecute();
});
function afterExecute() {
  // this will not fire until after the response has been set.
}
...