【问题标题】:Function returning "undefined" while trying to query database in node.js尝试在 node.js 中查询数据库时返回“未定义”的函数
【发布时间】:2022-01-25 01:06:56
【问题描述】:

这段代码总是返回 undefined 给调用函数。我是 JavaScript 新手,我确实尝试过查看 Stack Overflow 和其他资源上的一些回调解决方案,但没有一个对我有用。对此的任何帮助将不胜感激。谢谢!

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

【问题讨论】:

标签: javascript mysql node.js callback


【解决方案1】:

严酷

好的,如果您在函数 execute_rows 内打印查询结果,就在 de 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. 使用异步/等待
  2. 仍在使用 Promise(回调驱动)

调用你的函数:

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

异步/等待: https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Asynchronous/Async_await

【讨论】:

  • 嘿,我尝试了您的解决方案,但仍然无法正常工作。当我尝试第一个调用方法时,要么得到“SyntaxError:await 仅在异步函数和模块的顶层主体中有效”,要么得到“TypeError:无法在 Object." 当我尝试第二种方法时。
  • @HarshithPatil 对不起,我更新了我的问题,因为我在承诺返回声明中有错误。现在你可以试试了。您基于 async/await 解决方案的“SyntaxError”是因为您需要使您的更高功能异步。阅读 async/await 以了解这一点。尝试第二种方式(使用 then-catch)并告诉我!
  • 非常感谢!!!!!!!这有效!
猜你喜欢
  • 2020-01-10
  • 1970-01-01
  • 1970-01-01
  • 2021-08-25
  • 2020-10-12
  • 2019-07-17
  • 2023-03-14
  • 2021-11-02
相关资源
最近更新 更多