実際、@Quentineは正しいものに近かった...
これは、mysql2
の「一種の」バグです。 、 https://github.com/sidorares/node-のため、並べ替えを使用しますmysql2 / issues / 902
mysql2
の開発チームを提案します 大丈夫ですそれで。
これは、mysql2.poolが作成された接続に呼び出しを渡す方法の問題であり、ラッピングの約束に例外を渡しません。
最終的に、適切なPromise処理でラップされた接続と呼び出しの実行を作成するための独自のラッピング関数を作成しました。
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);
});
});
}