'How to return a value from a function that uses 'http.get()' method in Node.js?

I have a simple HTTP GET function that only needs to return the response in a function, but right now this function is returning void.

The code in 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

And when I import the module in index.js, the console returns [Function: checkSite] and not the value itself.

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

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

However, if I add the return statement on http.get() in the function, the console prints undefined. So I thought that this undefined is a progress, but I don't understand why does it return undefined?

(return http.get() in the checkSite function)

Any help, tips is appreciated.



Solution 1:[1]

Because callbacks in JavaScript are asynchronous, you can't return from within a callback.

That means this

console.log(extSiteCheck.checkSite)

runs before the request comes back.

You can try console logging within your callback (instead of trying to return a value), in order to see this in practice. But basically, whatever you are trying to achieve with the results of your get request, you need to do inside the callback.

Solution 2:[2]

mebbe something like ... console.log( extSiteCheck.checkSite() );

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 emilyb7
Solution 2 Greenman