没有对象实例的承诺
Promisify without object instance
如果我们已经创建了池,我们可以承诺 mysql 池 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);
您可以更改您的 getConnectionPm,并为每个连接添加一个 queryPM
promisified 查询方法。
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);
});
如果我们已经创建了池,我们可以承诺 mysql 池 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);
您可以更改您的 getConnectionPm,并为每个连接添加一个 queryPM
promisified 查询方法。
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);
});