Ваш код смешивает стили программирования. client.release()
- это то, что вы используете, когда вы хотите использовать API с Promises, client.query(query, callback)
- это то, что вы используете, когда вы хотите использовать API обратного вызова. Это не очень хорошая идея смешивать два.
Если вы хотите использовать стиль обратного вызова, то вы должны использовать стиль обратного вызова с pool.connect
и вызывать параметр release
, который передается вашему обратному вызову:
pool.connect((err, client, release) => {
// if err, report it.
client.query('SELECT NOW()', (err, result) => {
// if err, report it.
// do stuff, and then release the client
release() // <--- call the 3rd argument passed to your callback
})
})
Если вы хотите использовать Promise API, вы должны переписать свой код следующим образом:
const client = await pool.connect();
let res;
try {
res = await client.query("some query");
}
finally {
await client.release();
}
// do something with res
Важно то, что этот код обрабатывает обещание, выдаваемое client.release()
, поэтому в случае неудачи вы не получите UnhandledPromiseRejectionWarning
. Узел выведет ошибку на консоль и предоставит трассировку стека.