Promise with query binding 不会结束

Promise with query binding doesnt end

我在 NodeJs 的模块 mysqlFunction 中有这个功能 query。当查询没有绑定时,这些函数可以正常工作,但是当我使用绑定时,例如,在 WHEREINSERT 中使用参数,承诺不会结束并且请求永远不会完成。奇怪的是指令被执行了,比如字段被插入到table,或者select returns的数据中。

//mysqlFunction.js
const mysql = require("MySQL");
const pool = mysql.createPool(dbConfig);
const query = (sql, binding) => {
    return new Promise((resolve, reject) => {
        pool.query(sql, [binding], (err,result) => {
            if (err) reject(err);
            resolve(result);
        });
    });
};

//Calling the function
const exampleId = 1;
const sql = `SELECT * FROM table WHERE id = ?`;
mysqlFunction.query(sql, exampleId, (error, results) => {
    if (error) throw error;
    if (results.length > 0){
        res.json (results);
    } else {
        res.send('No result')
    }
});

Node 有一个内置的实用程序 util.promisify,它可以将节点样式的错误优先回调函数 (err, result) => ... 转换为 Promise 返回函数 -

// mysqlFunction.js

const mysql =
  require("MySQL")

const util =
  require("util")

const pool =
  mysql.createPool(dbConfig)

const query =
  util.promisify(pool.query.bind(pool))

module.exports = { query: query }

Promise 和 async/await 语法的要点是避免编写容易出错的回调。您的代码保持平坦,您可以以同步方式对其进行推理。

const mysqlFunction =
  require("./mysqlFunction.js")

const exampleId = 1

const sql = `SELECT * FROM table WHERE id = ?`

try {
  res.json(await mysqlFunction.query(sql, [exampleId])) // await
}
catch (err) {
  res.send(err.message)                // handle errors
}