首页 > 解决方案 > 如何在 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();

我需要得到响应,但是在控制台中显示未定义。我该如何解决?

标签: javascriptmysqlnode.js

解决方案


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 是一种优雅的回调函数编码方式,当涉及太多回调时,它将帮助您避免回调地狱。


推荐阅读