javascript - 如何在 Node.JS 的一个函数中使用来自 MySQL 的响应?
问题描述
我在 Node.JS 中有这段代码:
var mysql= require('mysql');
function first(){
var connection = mysql.createConnection({
host : 'xxxxx',
user : 'admin',
password : 'xxxxx',
database : 'xxxxx',
port : 'xxxxx'
});
connection.connect();
connection.query('select*from test', function (error, results, fields) {
if (error) throw error;
return results[0].num;
});
}
function two(){
res = first();
console.log(res);
}
two();
我需要得到响应,但是在控制台中显示未定义。我该如何解决?
解决方案
var mysql= require('mysql');
function first(){
return new Promise((resolve, reject) => {
var connection = mysql.createConnection({
host : 'xxxxx',
user : 'admin',
password : 'xxxxx',
database : 'xxxxx',
port : 'xxxxx'
});
connection.connect();
connection.query('select*from test', function (error, results, fields) {
if (error) reject(error);
else
resolve(results[0].num);
});
});
}
function two(){
first().then((result) =>{
console.log(res);
}).catch((error) =>{
console.log(error);
});
}
two();
上面的代码应该可以工作。您的代码显示未定义,因为您的 sql 查询正在发送回调,并且您在操作完成之前 console.logging 它。我使用了 Promise,但您也可以使用 asyc/await 功能。Promise 是一种优雅的回调函数编码方式,当涉及太多回调时,它将帮助您避免回调地狱。
推荐阅读
- python-3.x - 这个错误的原因是什么:“PermissionError: [WinError 5] Access is denied”
- ajax - 这个 ajax 调用的正确相对路径是什么?
- javascript - 即使在服务器和客户端上设置标头后,错误“请求的资源上不存在'Access-Control-Allow-Origin'标头”
- bioinformatics - x86_64-pc-mingw64 编译 hmmer 软件时出错
- javascript - 在其他地方初始化 'mymodule' 后调用 require('mymodule') 是否正确?
- php - 使用 AJAX 和 PHP 从联系表单发送邮件后,如何显示弹出警报消息?
- c# - 为什么在 AVAudioEngine 中点击麦克风时缓冲区中的 BytesPerFrame 异常巨大
- javascript - 如何在所有打开的选项卡中更新本地存储
- serenity-bdd - 使用 Serenity bdd 编写自定义测试报告器
- python - 如何将 nameko 依赖项传递给 SqlAlchemy 事件处理程序?