【问题标题】:Calling https.get using nodejs from a function?从函数中使用 nodejs 调用 https.get?
【发布时间】:2016-11-29 15:33:26
【问题描述】:

我正在尝试编写我的第一个 Alexa Skill,并且我正在执行一个运行良好的 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')

它只是返回未定义。

有什么想法吗?谢谢

我想是因为它是一个异步调用,由于回调它没有设置值,但我已经尝试实现它并且无法让它工作。

谢谢

【问题讨论】:

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


    【解决方案1】:

    你在 http.get 回调之前从你的函数返回,混合了同步和异步行为。

    所以你的函数是 returning 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;
    });
    

    【讨论】:

    • 非常感谢!经过几个小时的尝试,这个回调终于点击了! :) 谢谢 xShirease
    猜你喜欢
    • 2018-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-04
    • 1970-01-01
    • 2013-10-26
    • 2016-06-15
    • 2019-01-27
    相关资源
    最近更新 更多