Think of async operations as those that occur after the rest.
Your getEncounterDashBoard is called and starts the request, but everything in your code continues, with or without response (usually without as everything is too quick).
Therefore, your let labels is trying to get this.dataList[0] before you actually have a response. One thing you can do, is create a component-scoped variable labels, and then asign it inside the callback of the async function (inside the subscribe), this way this happens after the async function has resolved.
Another option, is create a function that handles the logic you want to happen after the async is resolved, and call it inside the subscribe.
afterDataList() {
let labels = this.dataList[0]
// do something with it
// ...
}
let labels = this.dataList[0];just afterthis.dataList = data.result;. The reason isdataListis updated asynchronously in a callback, meaningthis.dataList[0]might not hold any data when you call it..subscribeis an async function. You will have to setlabelsinside.subscribe