如何从Node.js中使用'http.get()'方法的函数返回一个值?

时间:2018-02-06 16:05:18

标签: node.js http get return-value

我有一个简单的HTTP GET函数,只需要在函数中返回响应,但现在这个函数正在返回void

sitechecks.js

中的代码
var checkSite = () => {
    https.get('https://itmagazin.info', (res, err) => {
        if (res.statusCode === 200 && res.statusMessage === 'OK') {
            return `The site returned: ${res.statusMessage}`
        } else return `Error, the site returned: ${err.message}`
    })
}

module.exports = checkSite

当我在index.js中导入模块时,console会返回[Function: checkSite]而不是值本身。

// Index.js
var extSiteCheck = require('./sitechecks')

// This console prints [Function: checkSite] instead of "OK"
console.log(extSiteCheck.checkSite)

但是,如果我在函数return上添加http.get()语句,则console会打印undefined。所以我认为这undefined是一个进步,但我不明白它为什么会返回undefined?

checkSite 功能中的return http.get()

任何帮助,建议表示赞赏。

1 个答案:

答案 0 :(得分:1)

由于JavaScript中的回调是异步的,因此您无法从回调中返回。

这意味着这个

console.log(extSiteCheck.checkSite)

在请求返回之前运行。

您可以在回调中尝试控制台记录(而不是尝试返回值),以便在实践中看到这一点。但基本上,无论您尝试使用get请求的结果实现什么,都需要在内部进行回调。