gpt4 book ai didi

node.js - 在此 node.js 函数中运行多个 MySQL 查询

转载 作者:太空宇宙 更新时间:2023-11-03 22:51:47 24 4
gpt4 key购买 nike

我有这个 node.js 函数,它在执行单个 MySQL 查询后返回一个 Promise。

function deletePoint(PointObj, door_id) {

return new Promise(function(resolve, reject) {
try {
var connection = jonMySQL.getMySQL_connection();

var mysql_query = '`DELETE FROM table1 WHERE user_id=? and door_id=?`';

var mysql_query_placeholder_arr = [PointObj.user_id, door_id];

connection.query(mysql_query, mysql_query_placeholder_arr, function(err, rows, fields) {
if (err) {
return reject(err);
} else {
resolve(rows);
}
});
} catch (err) {
reject(err);
}
});

}上面的功能运行良好。但是,如果我希望该函数完成运行 2 个 MYSQL 查询怎么办?

第二个查询看起来像这样;

var mysql_query2 = '`DELETE FROM table2 WHERE user_id=? and door_id=?`';
var mysql_query2_placeholder_arr = [PointObj.user_id, door_id];

如何将第二个 MySQL 查询集成到函数中,以便仅在执行两个查询后 Promise 才会返回?

编辑:如果提供的答案可以处理最多多个查询(例如最多 5 个)而无需回调 hell ,那就更好了。有人可以使用异步模块提供答案吗?

最佳答案

我建议创建一个通用方法来执行查询,您可以根据您的要求修改它。

注意:按顺序运行,您必须管理在 resolve(rows) 中返回的行。同时,所有行都会以对象数组的形式在最终 successCallback result 参数中生成。

function deletePoint(PointObj, door_id){  
var query = {
text : '`DELETE FROM table1 WHERE user_id=? and door_id=?`',
placeholder_arr : [PointObj.user_id, door_id],

};
var query2 = {
text : '`DELETE FROM table2 WHERE user_id=? and door_id=?`',
placeholder_arr : [PointObj.user_id, door_id],

};

//do this if you want to execute the queries sequentially
mySQLQuery(query).then(mySQLQuery(query2)).then(successCallback).catch(errorCallback);

//do this if you want to execute the queries parallely
var query_arr = [mySQLQuery(query),mySQLQuery(query2),...];
Promise.all(query_arr).then(successCallback,errorCallback)


function successCallback(result){
console.log('done',result);
}
function errorCallback(err){
console.log('Error while executing SQL Query',err);
}

}


function mySQLQuery(query) {

var connection = jonMySQL.getMySQL_connection();
return new Promise(function(resolve, reject) {
try {
connection.query(query.text, query.placeholder_arr, function(err, rows, fields) {
if (err) {
return reject(err);
} else {
return resolve(rows);
}
});
} catch (err) {
return reject(err);
}
});

此外,您始终可以使用async模块,

  • async.parallel 用于并行执行,
  • async.waterfall 用于顺序执行,并将值从一个函数传递到另一个函数或
  • async.series 如果不需要在顺序函数之间传递值。

关于node.js - 在此 node.js 函数中运行多个 MySQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39893552/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com