I have two files; server.js and scrape.js, below are the code snippets as they currently stand.
server.js:
const scrape = require("./scrape");
async function start() {
const response = await scrape.start();
console.log(response);
}
start();
and scrape.js:
const cheerio = require("cheerio");
const request = require("request-promise");
go = async () => {
const options = {
uri: "http://www.somewebsite.com/something",
transform: function(body) {
return cheerio.load(body);
}
};
request(options)
.then($ => {
let scrapeTitleArray = [];
$(".some-class-in-html").each(function(i, obj) {
const data = $(this)
.text()
.trim();
scrapeTitleArray.push(data);
});
return scrapeTitleArray;
})
.catch(err => {
console.log(err);
});
};
module.exports = {
start: go
};
So when I spin up server.js, I return undefined to the console.log(response), when I actually want to return the array i've been pushing to, can you see where I'm going wrong?
I believe your
go
function isn't returning any value.You're calling
request(options).then(...)
, but what follows from that promise is never returned bygo
. I recommend you add areturn
statement:You need to
return
something from yourasync
function (a return inside a then does not return from the main function). Either a promise or something youawait
-ed.Also, make sure to declare your
go
variable to avoid leaking it into the global space.Since you are using an
async
function, you might want to take advantage of theawait
syntax also.