使用函数中的nodejs调用https.get?

时间:2016-11-29 15:33:26

标签: node.js lambda alexa-skills-kit

我正在尝试编写我的第一个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。

有什么想法吗?感谢

我想,因为它的异步调用不是因为回调而设置的值,但是我尝试实现它并且无法让它工作。

由于

1 个答案:

答案 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;
});