In realtà, @Quentine era vicino alla cosa giusta...
È "una specie" di un bug in mysql2
, io uso una sorta di perché https://github.com/sidorares/node- mysql2/issues/902
suggerisce il team di sviluppo di mysql2
va bene con esso.
è un problema con il modo in cui mysql2.pool passa la chiamata alla connessione creata, che non passa l'eccezione alla promessa di wrapping.
Ho finito per creare la mia funzione di wrapping per creare la connessione + eseguire la chiamata avvolta nella corretta gestione delle promesse.
import mysql = require('mysql2');
private async queryDB(query:string, useExecute: boolean = false, ...args:any[]) : Promise<any[]>
{
return new Promise<any[]>((resolve, reject)=>{
for(var i = 0; i < args.length; ++i)
{
if(args[i]===undefined)
args[i] = null;
}
this.dbPool.getConnection((err, conn)=>{
if(err){
reject(err);
return;
}
let cb = function(err: mysql.QueryError, results: any[], fields: mysql.FieldPacket[]) {
conn.release();
if(err)
{
reject(err);
return;
}
resolve(results);
}
if(useExecute)
conn.execute(query, args, cb);
else
conn.query(query, args, cb);
});
});
}