Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Warum führt dieser MySQL-Fehler dazu, dass nodejs abstürzt, anstatt zur catch-Funktion zu gehen?

Eigentlich war @Quentine genau das Richtige...

Es ist "sozusagen" ein Fehler in mysql2 , ich verwende sort-of, weil https://github.com/sidorares/node- mysql2/issues/902 schlägt das Entwicklerteam von mysql2 vor ist in Ordnung. damit.

Es ist ein Problem mit der Art und Weise, wie mysql2.pool den Aufruf an die erstellte Verbindung weiterleitet, die die Ausnahme vom Wrapping Promise nicht weiterleitet.

Am Ende habe ich meine eigene Wrapping-Funktion erstellt, um die Verbindung zu erstellen und den Aufruf auszuführen, der in der richtigen Promise-Behandlung verpackt ist.

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);                
            });
        });
    }