Faktisk var @Quentine tæt på det rigtige...
Det er "en slags" en fejl i mysql2
,jeg bruger slags, fordi https://github.com/sidorares/node- mysql2/issues/902
foreslår udviklingsteamet for mysql2
er o.k. med det.
det er et problem med den måde, mysql2.pool videregiver opkaldet til den oprettede forbindelse, som ikke videregiver undtagelsen til indpakningsløftet.
Jeg endte med at lave min egen ombrydningsfunktion for at skabe forbindelsen + opkaldsudførelse pakket ind i korrekt løftehåndtering.
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);
});
});
}