首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >节点mysql2异步-等待尝试捕获

问节点mysql2异步-等待尝试捕获
EN

Stack Overflow用户
提问于 2018-10-09 09:46:28
回答 1查看 3.7K关注 0票数 1

我的问题是处理异步中的错误--在Nodejs中等待mysql查询。我正在使用mysql承诺包装器在nodejs中创建一个连接池。

代码语言:javascript
复制
const mysql = require('mysql2/promise');

const pool = mysql.createPool({
host: '192.168.0.1',
  user: 'root',
  database: 'h2biz_18_dev',
  waitForConnections: true,
  connectionLimit: 100,
  queueLimit: 0,
  password : 'abc'
})

内部catch块连接释放不能被调用,因为抛出错误

代码语言:javascript
复制
Cannot read property 'release' of undefined

如果查询执行引发错误,是否需要释放catch块中的连接?如果是这样的话,用mysql2释放异步等待中的连接和捕获错误的正确方法是什么?

代码语言:javascript
复制
router.post('/getHolidaysOfYear',async function (req, res, next) {      
    var conn;

try{
    conn = await pool.getConnection();
        // Do something with the connection
    var promise1 = conn.execute(`
    SELECT 
        CALENDAR.*
    FROM
        hrm_calendar_holiday_policy1 CALENDAR
    `);
    const values = await Promise.all([promise1]);
    conn.release();
    return res.status(200).send({success:true, data:values[0][0]});
}

catch(err){
    logger.error(API_NAME + 'error :' + err);
    conn.release();
    return res.status(500).send({success:false, message:'Query Error'});
}
});
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-09 09:54:29

看起来甚至在初始化conn之前就会发生错误,所以在pool.getConnection();内部也是如此。

因此,在catch块中,变量conn为null,因此不能/不需要释放它。

你可以这样做:

代码语言:javascript
复制
catch(err){
    logger.error(API_NAME + 'error :' + err);
    if(conn !== undefined) //This will check if the conn has already be initialized
        conn.release();
    return res.status(500).send({success:false, message:'Query Error'});
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52718007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档