Обещание без экземпляра объекта - PullRequest
0 голосов
/ 18 февраля 2020

Мы можем обещать функцию 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);

1 Ответ

1 голос
/ 18 февраля 2020

Вы можете изменить свой getConnectio nPm и добавить обещанный метод запроса 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);
});
...