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
there are two things:
first, the code in the then()
block is returned to price
variable that isn't returned
second, var price = get_price(symbol);
the function call is not using await
so if you log that you will get the promise instead of the value.
you need to return
the axios call and await
it when using the function elsewhere
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.