Faktum är att @Quentine var nära det rätta...
Det är "en sorts" en bugg i mysql2
,jag använder sorts eftersom https://github.com/sidorares/node- mysql2/issues/902
föreslår utvecklingsteamet för mysql2
är o.k. med den.
det är ett problem med hur mysql2.pool skickar anropet till den skapade anslutningen, vilket inte skickar undantaget från omslutningslöftet.
Det slutade med att jag skapade min egen omslutningsfunktion för att skapa anslutningen + samtalsexekvering insvept i korrekt löfteshantering.
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);
});
});
}