I am trying to get the price of each stock in the stock_data state variable, using the short_name key. Here is my useEffect function which does all the fetching for me. The fetch_BSE_Data is to store in the stock_data. But the API I am using for it doesn't give any price details of the stocks. So, I tried fetching the price using Yahoo's API in the fetch_price_data function:
Fetching in UseEffect
useEffect(() => {
const fetch_BSE_Data = async () => {
console.log("fetching data");
return await fetch(
"https://api.bseindia.com/BseIndiaAPI/api/DefaultData/w?Fdate=20220912&Purposecode=P9&TDate=20221216&ddlcategorys=E&ddlindustrys=&scripcode=&segment=0&strSearch=S"
)
.then((response) => response.json())
};
const fetch_price_data = async () => {
const data = stock_data.map((stock) => {
var shortName = stock.short_name;
if (stock.short_name.includes(" ")) {
shortName = stock.short_name.replace(" ", "")
}
else if (stock.short_name.includes("*")) {
shortName = stock.short_name.replace("*", "")
}
fetch(`https://query1.finance.yahoo.com/v8/finance/chart/${shortName}.BO`)
.then((response) => response.json())
.then((response) => {
if (response.chart.result[0]) {
console.log("result: ", response.chart.result, "response: ", response.chart.result[0].meta.previousClose)
return response.chart.result[0].meta.previousClose;
}
else {
console.log("ERROR:", response.chart.error.code);
return null;
}
});
})
return data
}
const fetchData = async () => {
const stock_response = await fetch_BSE_Data();
const price_data = await fetch_price_data();
console.log("price_data: ", price_data)
const mappedItems = makeMyNewData(stock_response, price_data);
setStockData(mappedItems);
console.log("stock_data after setStockData", stock_data);
}
fetchData();
}, []);
The data in the fetch_price_data comes out as an array of undefined. What am I doing wrong?