函数在 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();
     });
 });
}

现在,当你调用你的函数时,你有两个选择:

  1. 使用async/await
  2. 仍在使用承诺 (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);
});

请阅读 promisesasync/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