I'm trying to learn async functions and am struggling to get the following to work.
async get_price(ticker) {
var price = await axios
.get(`https://marketwebsite.com/${ticker}`, {
headers: {
"User-Agent":
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.74 Safari/537.36",
},
})
.then((res) => {
const $ = cheerio.load(res.data);
$(".todays_price").each((index, element) => {
var value = $(element)
.find(".current_price")
.text()
.replace(/\s\s+/g, "");
return value;
console.log(value); // THIS WORKS
});
})
.catch((err) => console.error(err));
}
When i call
var price = get_price(symbol);
I cannot get any return from this function. The console log noted above does work, however i cannot get the value to return from this function.
I have tried to await get_price(symbol)
as well.
There are a few issues in your snippet including:
get_price
function.then()
callTry the following snippet:
async function get_price(ticker) {
return await axios
.get(`https://marketwebsite.com/${ticker}`)
.then((res) => {
const $ = cheerio.load(res.data);
return $(".todays_price").map((index, element) => {
var value = $(element)
.find(".current_price")
.text()
.replace(/\s\s+/g, "");
return value;
});
})
.catch((err) => console.error(err));
}
get_price('ticker').then((res) => {
console.log(res); // Should print array of the values
});
I've used the jQuery .map method as it seems like you intended to return the values for each element.
I suggest going through the documentation on async await and promises on the MDN docs. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With