【发布时间】:2020-06-02 09:57:17
【问题描述】:
如果我们已经创建了池,我们可以promisify mysql pool getConnection函数,像这样:
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);
【问题讨论】:
-
util.promisify(connection.query.bind(connection))呢? -
@Lux 我可以做类似
mysqlPool.getConnectionPm = util.promisify(mysqlPool.getConnection.bind(mysqlPool));的事情。但是在从getConnection函数获取连接之前,我没有连接变量来承诺它。像这样的东西不起作用util.promisify(mysqlPool.getConnection.query.bind(mysqlPool.getConnection)),因为查询未定义。 -
在你创建连接之后再承诺。