2016-11-29 37 views
0

我想寫我的第一個Alexa技巧,我正在做一個HTTP請求,它可以正常工作,但是我想把它包裝成一個函數,我可以從我的主代碼中調用它。使用函數中的nodejs調用https.get?

它不工作,我不太肯定我怎麼能存儲響應到一個變量,這裏是到目前爲止我的代碼:

function getValue(loc) { 
    var endpoint = 'URLHERE' 
    var something = "" 
    var body = "" 
    https.get(endpoint, (response) => { 
     response.on('data', (chunk) => { 
      body += chunk 
     }) 
     response.on('end',() => { 
      data = JSON.parse(body) 
      something = data.result.node.value; 
     }) 
    }) 
    return something; 
} 

這是亞馬遜和使用lambda使用節點的功能.js文件

我使用稱之爲getValue('test')

var result = getValue('test') 

它只是返回undefined。

任何想法的?謝謝

我想象因爲它的異步調用它沒有設置回調的價值,但我試圖實現這一點,並不能得到它的工作。

感謝

回答

1

你從你的函數返回http.get的回調之前,異步行爲混合同步。

因此您的功能是return ing something尚未定義。

試試這個:

function getValue(loc,cb) { 
    let endpoint = 'URLHERE' 
    let something = "" 
    let body = "" 
    https.get(endpoint, (response) => { 
     response.on('data', (chunk) => { 
      body += chunk 
     }) 
     response.on('end',() => { 
      data = JSON.parse(body) 
      cb(data.result.node.value); 
     }) 
    }) 
} 

getValue(test,(result)=>{ 
    //do something with result here; 
}); 
+0

太感謝你了!經過幾個小時的嘗試這個回調的終於點擊! :)感謝xShirease – realtek