I cant seem to figure a way around this following error : TypeError: Cannot read properties of undefined (reading '0')
. So I am calling an external API to receive financial data. From that retrieved data I call certain values and by calling the index of of where those values are stored for example api.annualReports[0].operatingCashflow
. However, the odd things is that I am able to receive and have the data formatted the way I like to but most of the time it I would get the error I mentioned above.
Here one the approach I took:
const formatedFinancialData = asyncHandler (async(req, res) => { const { ticker } = req.body if(ticker){ const formattedDate = {} const cashFlow = `https://www.alphavantage.co/queryfunction=CASH_FLOW&symbol=${ticker}&apikey=${process.env}; const cashFlow_reponse = await fetch(cashFlow); const cashFlow_Json = await cashFlow_reponse.json() formattedDate.cashFlow_2021 = (cashFlow_Json.annualReports[0].operatingCashflow); formattedDate.cashFlow_2020 =(cashFlow_Json.annualReports[1].operatingCashflow)' formattedDate.cashFlow_2019 = (cashFlow_Json.annualReports[2].operatingCashflow) } }
After looking around for another approach I tried using axios
and I encountered the same issue. Here the code for that approach...
async function CashFlowData() { return await axios.get(`https://www.alphavantage.co/query?function=CASH_FLOW&symbol=${ticker}&apikey=${process.env.ALPHA_API_TOKEN}`); } try { const response = await CashFlowData(); if(response.data.annualReports){ formattedDate.cashFlow_2021 = (response.data.annualReports[0].operatingCashflow); } }
I ran into the same issue most of time I am able to receive and format the data and the other times I would get this error TypeError: Cannot read properties of undefined (reading '0')
.
In the front end I take in the ticker from the user and pass is along and here's example code:
const [tickerData, setTickerData] = useState([]); const keyPress = async (e) => { if(e.keyCode === 13 || e.key === 'Enter' ){ e.preventDefault(); const data = e.target.value; await axios.post('http://localhost:5000/api/apiData',{ ticker: data }).then( res => { setTickerData( res.data.formattedDate) }).catch((err) => { setErrorMsg(`${err.message} - Please try again!`) }) } }
I cant seem to find a way around it for quite some time now and honestly, I would really appreciate any help thank you.
There's a huge possibility that annualReports
is not an array or is an empty array which means we can't access the first(0) object in the array hence the error: TypeError: Cannot read properties of undefined (reading '0')
.
Use optional chaining to avoid the error if annualReports
will not always be an array or if annualReports[0]
might be undefined.
Example: cashFlow_Json.annualReports[0]?.operatingCashflow
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.