sql >> Databáze >  >> RDS >> Mysql

proč tato chyba mysql způsobí pád nodejs namísto přechodu na funkci catch?

Ve skutečnosti byl @Quentine blízko správné věci...

Je to "jakási" chyba v mysql2 ,používám druh, protože https://github.com/sidorares/node- mysql2/issues/902 navrhuje vývojový tým mysql2 je o.k. s tím.

jde o problém se způsobem, jakým mysql2.pool předává volání vytvořenému připojení, které nepředá výjimku ze slibu balení.

Nakonec jsem vytvořil svou vlastní zabalovací funkci pro vytvoření spojení + provedení volání zabalené do správného zpracování slibů.

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


  1. Jak používat MySql na Macu

  2. Co znamená profesionální pracovní postup při vytváření databáze pomocí Hibernate v Eclipse?

  3. mysql vyberte skupinu součtu podle data

  4. Použití sekvenčních hodnot pro primární klíč v dotazu INSERT