在使用nodejs的mysql.js时发生的问题,望解答
发布于 6 年前 作者 Sossmc 2092 次浏览 来自 问答

故事发生在用node.js运行名为mysql.js的脚本

mysql.js:

var mysql  = require('mysql');  
var connection = mysql.createConnection({
  host     : 'localhost',       
  user     : 'root',              
  password : '123456',       
  port: '3306',                   
  database: 'newweb' 
});
var sql = 'SELECT * FROM chat where line = 1';
var hee = function(connection,sql){
    var hea=[{cid:0},{cid:0},{cid:0}];                 //初始化
    connection.query(sql,function (err, result) {
        var a=0;
        if(err){
            console.log('[SELECT ERROR] - ',err.message);
            return;
        }
        for (var rs of result){
            hea[a].cid=(rs.cid);
            a++;
        }
        console.log(hea);       //标记1处[{cid:1},{cid:2},{cid:3}]
    });
    console.log(hea);           //标记2处[{cid:0},{cid:0},{cid:0}]                 
};
connection.connect();
hee(connection,sql);
connection.end();

问题:

发生了如图所示的输出结果 想问问为什么hea的内容值没被改变呢, 如果我特别想把结果result的部分(比如hea)从connection.query这个函数里取出来,应该要怎么做呢?

2 回复

你是说标记2出的hea没改变吗?这是因为是异步的呀,你标记2处打印hea时 你query函数还没执行完,当然还没改变啦

可以采用回调或者promise的方式 比如回调,假设你在main函数里需要调用connection.query

function main(){
	connection.query(sql,(err,result=>{
		console.log(result)
	}))
}

或者采用promise

function hee(sql){
	return new Promise((resolve,reject)=>{
		connection.query(sql,function (err, result) {
		  if(err){
			  return reject(err)
		  }
			resolve(result)
		})
	})	
}

async function main(){
	let result=await hee(sql)
}
回到顶部