2012-02-28 5 views
4

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

ответ

6
request.execute(function(resp){ 
    response = resp; 
    afterExecute(); 
}); 
function afterExecute() { 
    // this will not fire until after the response has been set. 
} 
+0

Это должно быть сделано. OP, имейте в виду, что ваш 'response' var имеет объем функции, в которой он находится (если он в одном). Поэтому, если вам нужно использовать его вне этого, обязательно переместите объявление. – shanabus

+0

Это должно работать, да, но, похоже, функция execute() обрабатывает обратный вызов немного иначе, чем я думал; Я отредактировал главный вопрос, чтобы отразить эту проблему. – Tanaki

+1

Обратный вызов скорее всего асинхронный. – Ivan

Смежные вопросы