1

getConnection如果我们已经创建了池,我们可以 promisify mysql 池功能,如下所示:

const mysql = require('mysql');
const util = require('util');

const mysqlPool = mysql.createPool(CONFIG);

const getConnectionPm = util.promisify(mysqlPool.getConnection).bind(mysqlPool);

用法可以是:

(async() => {
    const connection = await mysqlPool.getConnectionPm();

});

如何保证mysqlPool.getConnection.query函数使用connection变量?做这样的事情:

(async() => {
    const connection = await mysqlPool.getConnectionPm();

    const result = await connection.queryPm(SQL_QUERY, SQL_ARGS);
});

问题是我不知道如何将connection变量传递给 promisify 函数。我想一种不同的方法是创建一个带有getConnectionPm函数的连接对象,然后将查询绑定到该对象,就像我们为getConnection自己承诺所做的那样。但是我们如何才能实现类似上面的代码呢?

例如,下面的代码给出了一个未定义的错误:

const getConnectionPm = util.promisify(mysql.createPool.getConnection);
4

1 回答 1

1

您可以更改您的 getConnectionPm,并queryPM为每个连接添加一个承诺查询方法。

const getConnectionPm = async () => {
    const conn = await util.promisify(mysqlPool.getConnection).call(mysqlPool);
    conn.queryPm = util.promisify(conn.query).bind(conn);
    return conn;
}

然后你可以像你的例子一样查询。

(async() => {
    const connection = await mysqlPool.getConnectionPm();
    const result = await connection.queryPm(SQL_QUERY, SQL_ARGS);
});
于 2020-02-18T12:36:02.950 回答