mysql - Nodejs函数返回未定义,虽然回调参数有一个值
问题描述
我有以下代码:
const get = (ip,key) => {
mysql.query(`SELECT content FROM sessions WHERE ip = "${ip}" AND name = "${key}" ORDER BY id DESC LIMIT 1`,(err,result) => {
if(err) throw err
console.log('Callback:',result[0].content)
return result[0].content
})
}
console.log('Return:',get('10.0.0.9','test'))
它产生以下输出:
Return: undefined
Callback: test content
为什么我的函数没有返回任何东西?
解决方案
值“测试内容”是您传递给的处理程序(或回调)实际返回的内容mysql.query()
。
您的函数get实际上不返回任何内容。
您正在处理一个异步函数。有几种方法可以解决您的问题。
最简单的方法是将第三个参数传递给您的 get 函数,一个回调函数,然后在您的 mysql 处理程序中调用它。就像是:
const get = (ip,key,callback) => {
mysql.query(`SELECT content FROM sessions WHERE ip = "${ip}" AND name = "${key}" ORDER BY id DESC LIMIT 1`,(err,result) => {
if(err) throw err
console.log('Callback:',result[0].content);
// Call you custom callback here to forward result
callback( result[0].content );
})
}
get('10.0.0.9','test', (result) => console.log('Return:', result));
另一种更现代的方法是使用Promise
最“最新”的解决方案是使用async/await
推荐阅读
- c# - 线段与椭圆之间的距离
- azure-devops - Yaml If 块导致缺少映射
- sockets - Iputils ping 不理解来自 TAP 设备的 ICMP 响应
- android - 覆盖 Android 库项目资产文件
- javascript - 禁用“标签”和禁用“输入”Selenium
- javascript - 检查一个值是否在一个对象中的其他值(属性)之间,并且该对象在一个数组中
- javascript - 如何动态更改 Angular FullCalendar 事件颜色(特定事件)?
- css - 如何在形状内剪辑一个圆圈
- laravel - PWA 从 server.js 调用 POST 请求到 Laravel 中的 API - 419 未知状态
- javascript - 将变量添加到json