Javascript 获取MySQL表中满足条件的所有行的数组
我正在使用discord.js机器人,因此我正在使用Node.js。我需要做的是搜索我的MySQL表,获取所有符合条件的行(我可以这样做),然后返回所有符合条件的行的第一列中的值。我尝试了多种不同的方法,但我的主要问题是无法返回该值。我可以在查询中Javascript 获取MySQL表中满足条件的所有行的数组,javascript,mysql,node.js,Javascript,Mysql,Node.js,我正在使用discord.js机器人,因此我正在使用Node.js。我需要做的是搜索我的MySQL表,获取所有符合条件的行(我可以这样做),然后返回所有符合条件的行的第一列中的值。我尝试了多种不同的方法,但我的主要问题是无法返回该值。我可以在查询中console.log它,但我确实需要返回它 function fetchOrders(status){ textr = con.query(`SELECT * FROM orders WHERE OStatus = '${status}';`
console.log
它,但我确实需要返回它
function fetchOrders(status){
textr = con.query(`SELECT * FROM orders WHERE OStatus = '${status}';`, function(err,rows) {
if(err){
throw err
}
var text = "";
if(rows.length<1){
text = "None"
}else{
for(i=0;i<rows.length;i++){
text = text + "`" + rows[i].OID.toString() + "`, "
}
}
if(text===""){
text = "None"
}
return text;
})
return textr
}
函数获取订单(状态){
textr=con.query(`SELECT*FROM orders其中OStatus='${status}';`,函数(err,行){
如果(错误){
失误
}
var text=“”;
if(rows.length我假设您不熟悉node.calls中的异步调用。接受回调的调用通常是异步执行的,这意味着调用的结果不会立即可用(即使在函数调用结束后也不会),但一旦结果可用,就会调用回调
您可以修改代码以接受另一个回调,这样您的函数就有机会处理查询结果,然后通知调用方:
function fetchOrders(status, callback){
con.query(`SELECT * FROM orders WHERE OStatus = '${status}';`, function(err,rows) {
if(err){
callback(err);
}
var text = "";
if(rows.length<1){
text = "None"
}else{
for(i=0;i<rows.length;i++){
text = text + "`" + rows[i].OID.toString() + "`, "
}
}
if(text===""){
text = "None"
}
callback(null, text);
})
}
你需要写:
fetchOrders(status, function (err, result) {
if (err) {
throw err;
}
// do something with result
})
将此函数转换为如下所示的promise样式
function fetchOrders(status) {
return Promise((resolve, reject) => {
con.query(`SELECT * FROM orders WHERE OStatus = '${status}';`, function(
err,
rows
) {
if (err) {
reject(err);
}
var text = "";
if (rows.length < 1) {
text = "None";
} else {
for (i = 0; i < rows.length; i++) {
text = text + "`" + rows[i].OID.toString() + "`, ";
}
}
if (text === "") {
text = "None";
}
resolve(text);
});
});
}
fetchOrders
.then(result => {
console.log(result);
})
或
非常感谢您的解释-我是否可以在您编写的函数中放入一个返回结果
,以获取我的值,或者我是否仍在使用其他内容?@JackBarrett,不幸的是,这是不可能的,因为回调函数的返回值从未使用过。如果您希望以更同步的方式编写代码,请使用嗯,我建议你遵循Ashish的方法。非常感谢你。虽然我不太明白这对我来说似乎是有意义的。我将尝试应用这一点。这个链接可能会帮助你-经过一点修补,我终于能够根据你的解决方案使我的代码正常工作。你是一个救生员。非常感谢!(关于承诺等的指南看起来也很有用,所以也谢谢你)
fetchOrders
.then(result => {
console.log(result);
})
const response = await fetchOrders();