Promise with query binding 不会结束
Promise with query binding doesnt end
我在 NodeJs 的模块 mysqlFunction
中有这个功能 query
。当查询没有绑定时,这些函数可以正常工作,但是当我使用绑定时,例如,在 WHERE
或 INSERT
中使用参数,承诺不会结束并且请求永远不会完成。奇怪的是指令被执行了,比如字段被插入到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
}
我在 NodeJs 的模块 mysqlFunction
中有这个功能 query
。当查询没有绑定时,这些函数可以正常工作,但是当我使用绑定时,例如,在 WHERE
或 INSERT
中使用参数,承诺不会结束并且请求永远不会完成。奇怪的是指令被执行了,比如字段被插入到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
}