My 50cents about async and db. Connection pools and executing queries in separate connections can help only if you are not aware of transactionality. In apps which mostly reads from database and don't aware on showing not latest available data - it's ok.
But when you rely on using transactions - you have to work with single db-connection and call every query in it/synchronously.
AFAIK DBMS developers trying to fix it, but there is no standard (such as jdbc) and every vendor implements it in "own unique way". I.e. mysql team create X Plugin, which allows to fetch results concurrently within one connection (
https://dzone.com/articles/asynchronous-query-execution-with-mysql-57-x-plugi).
I think something similar may exists in other mainstream DBMS.