I am new to JavaScript and very new to node.js framework, just started using it a few days ago. My apologies if my code is nonsensical, the whole idea of promises and callba
Using util.promisify(), you can convert http.get()
into a promise-based asynchronous method, but first there's some preparation to do since it does not follow the convention of callback(error, response) { ... }
:
const http = require('http')
const { promisify } = require('util')
// define a custom promisified version of `http.get()`
http.get[promisify.custom] = (options) => new Promise(resolve => {
http.get(options, resolve)
});
// convert callback to promise
const httpGet = promisify(http.get)
async function getStatusCodeResult(website) {
const res = await httpGet(website)
const status = res.statusCode
const message = `${http.STATUS_CODES[status]}: ${website}`
if (status >= 400) {
throw message
} else {
return message
}
}
In addition, you can use http.STATUS_CODES to get the the appropriate message for each possible statusCode
rather than returning a vague Error
or Success
.
You mixed up the first two lines. The new Promise
wrapper that gets you the value to return needs to be on the outside, and the http.get
call should be inside its executor callback. Also you don't really need that timeout:
function getStatusCodeResult(website) {
return new Promise((resolve, reject) => {
http.get(website, (res) => {
let statusCode = res.statusCode,
error = statusCode >= 400 && statusCode <= 500 ? `error: ${website}`: null
if (error) {
reject(error)
} else if (statusCode >= 200 && statusCode <= 300) {
resolve(`Success: ${website}`)
}
})
})
}