我正在尝试编写我的第一个Alexa技能,并且我正在执行一个正常工作的http请求,但是我想将其包装到一个我可以从我的主代码中调用的函数中。
它不起作用,我不太确定如何将响应存储到变量中,到目前为止我的代码是这样的:
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作为使用node.js的函数
我使用
调用getValue('test')
var result = getValue('test')
它刚刚返回undefined。
有什么想法吗?感谢
我想,因为它的异步调用不是因为回调而设置的值,但是我尝试实现它并且无法让它工作。
由于
答案 0 :(得分:3)
您在回调http.get之前从函数返回,将Synchronous与异步行为混合在一起。
所以你的功能是return
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;
});