gpt4 book ai didi

mysql - Node.js 中的同步 mysql

转载 作者:太空宇宙 更新时间:2023-11-03 11:13:52 26 4
gpt4 key购买 nike

我知道 node.js 是事件驱动的,我应该执行此异步操作,但我无法在脑海中找到执行此操作的方法。

所以,我有这个

var querystr = "SELECT * FROM groups";
var result = "";
dbClient.query(querystr, function (err, res, fields) {
if (err) {
console.log(err);
return;
}
for(var i in res) {
result = result + "@" +res[i].name + " =";
for (var j in res[i].members.split(",")) {
var memberquery;
if (j.substr(0,1) == "@") {
memberquery = "SELECT name FROM groups WHERE id = "+j.substr(1, j.length-1);
} else {
memberquery = "SELECT username FROM users WHERE id= "+j;
}
dbClient.query(memberquery, function(err, memres, fields) {
var membername = "";
if (typeof memres[0].username == "undefined") {
membername = "@"+memres[0].name;
} else {
membername = memres[0].username;
}
result = result + " " + membername;
});

}
result = result + "\n";
}
});

使它同步的问题是内部的for。基本上我在结果变量中生成一个文档,我在其中检查组并告诉成员所以预期的输出是

Group1 = member, member
Group2 = member, member

最佳答案

对于此类问题,我通常使用如下所示的模式。简而言之:获取事物列表,然后调用一个函数来处理列表;该函数调用自身直到列表完成;在累加器中收集结果;当列表为空时,返回您通过回调累积的任何内容。这只是完成@Andrey Sidorov 在他的回应中展示的内容的另一种方式。

//cb is (err, res) 
function getData(cb){
var querystr = "SELECT * FROM groups";
var result = "";

dbClient.query(querystr, function (err, res, fields) {
if (err)
cb(err);
else {
var groups = [];
for (var ndx in res)
groups = groups.concat(res[ndx].members.split(","));

getMembers(groups, [], cb);
}
});
}

function getMembers(members, sofar, cb){
var member = members.shift();

if (!member)
cb(null, sofar);
else {
var memberquery;
var params;

if (member.substr(0,1) == "@") {
memberquery = "SELECT name FROM groups WHERE id = ?";
params = [member.substr(1, member.length-1)];
} else {
memberquery = "SELECT username FROM users WHERE id = ?";
params = [member];
}

dbClient.query(memberquery, params, function(err, res) {
if (err)
cb(err);
else {
var membername = "";
if (typeof res[0].username == "undefined") {
membername = "@" + res[0].name;
} else {
membername = res[0].username;
}

sofar.push(membername);

getMembers(members, sofar, cb);
}
});
}
}

关于mysql - Node.js 中的同步 mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6638646/

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