在使用nodejs的mysql.js时发生的问题,望解答
故事发生在用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)
}