2012-02-28 24 views
4

在嘗試使用Google的Javascript API時,我碰到了一個障礙。從Google JavaScript API請求中存儲響應

var response; 
var request = gapi.client.request({ 
    'path': '/plus/v1/people/' + "THEUSERID", 
    'params': {}}); 
request.execute(function(resp){}); 

execute函數(gapi.client.HttpRequest.execute)只有一個參數;一個回調函數。但是,我不希望在收到數據後馬上處理數據,我想將其存儲在代碼開頭聲明的response變量中。有沒有辦法使用回調參數來存儲響應?

原諒我,如果這有一個明顯的解決方案,我有點新的JavaScript。

編輯: 有人建議回調函數如下:

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 2012-02-28 02:30:08

+0

這應該工作,是的,但它看起來execute()函數處理回調有點不同於我想的;我編輯了主要問題以反映問題。 – Tanaki 2012-02-28 03:01:27

+1

回調最有可能是異步的。 – Ivan 2012-02-28 03:02:55