函数在 node.js 中尝试查询数据库时返回 "undefined"
Function returning "undefined" while trying to query database in node.js
这段代码对调用函数总是returns未定义。我是 JavaScript 的新手,我确实尝试研究了 Stack Overflow 和其他资源上的一些回调解决方案,但其中 none 对我有用。对此的任何帮助将不胜感激。谢谢!
var funcs = require('./index.js');
var connected = require('./database')
query='SELECT * from trades'
const res = execute_rows(query)
console.log(res)
function execute_rows(query){
con = connected();
con.query(query, function(err, result, fields) {
if (err) {
return console.log(err);
}
console.log(result) //Displays correct results
return result; // Returns undefined to calling function
})
con.end();
}
哈西斯
好的,如果您在 execute_rows
函数中打印 return
语句之前的查询结果,您应该能够看到它。
你的函数的问题是你实际上没有return“按时”得到结果。
您需要 return 承诺才能从您的函数中获取结果。
当您刚接触 JS 时,这可能有点难以理解。你的函数应该是这样的:
function execute_rows(query){
con = connected();
return new Promise((resolve, reject) => {
con.query(query, function(err, result, fields) {
if (err) {
// Returning the error
reject(err);
con.end();
}
resolve(result);
con.end();
});
});
}
现在,当你调用你的函数时,你有两个选择:
- 使用async/await
- 仍在使用承诺 (callback-driven)
正在调用您的函数:
const dbResult = await execute_rows(query);
或
execute_rows(query).then(result => {
// Get the result
console.log('result:', result);
}).catch(error => {
// Get the error
console.log('error:', error);
});
请阅读 promises
和 async/await
模式!
链接:
承诺:
https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/Promise
Async/await:
https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Asynchronous/Async_await
这段代码对调用函数总是returns未定义。我是 JavaScript 的新手,我确实尝试研究了 Stack Overflow 和其他资源上的一些回调解决方案,但其中 none 对我有用。对此的任何帮助将不胜感激。谢谢!
var funcs = require('./index.js');
var connected = require('./database')
query='SELECT * from trades'
const res = execute_rows(query)
console.log(res)
function execute_rows(query){
con = connected();
con.query(query, function(err, result, fields) {
if (err) {
return console.log(err);
}
console.log(result) //Displays correct results
return result; // Returns undefined to calling function
})
con.end();
}
哈西斯
好的,如果您在 execute_rows
函数中打印 return
语句之前的查询结果,您应该能够看到它。
你的函数的问题是你实际上没有return“按时”得到结果。 您需要 return 承诺才能从您的函数中获取结果。
当您刚接触 JS 时,这可能有点难以理解。你的函数应该是这样的:
function execute_rows(query){
con = connected();
return new Promise((resolve, reject) => {
con.query(query, function(err, result, fields) {
if (err) {
// Returning the error
reject(err);
con.end();
}
resolve(result);
con.end();
});
});
}
现在,当你调用你的函数时,你有两个选择:
- 使用async/await
- 仍在使用承诺 (callback-driven)
正在调用您的函数:
const dbResult = await execute_rows(query);
或
execute_rows(query).then(result => {
// Get the result
console.log('result:', result);
}).catch(error => {
// Get the error
console.log('error:', error);
});
请阅读 promises
和 async/await
模式!
链接:
承诺: https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/Promise
Async/await: https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Asynchronous/Async_await