https://levelup.gitconnected.com/handling-errors-in-asynchronous-code-best-practices-and-common-pitfalls-23c489c311d9