作者:五指间的节拍 | 来源:互联网 | 2023-09-18 17:09
最近刚刚学习nodejs,想把数据库读写放在一个模块里方便使用。代码方法事从数据库中读取数据后返回,利用console打印测试。但是控制台打出了undefined,应该是因为方法异步的原因。请问
最近刚刚学习nodejs,想把数据库读写放在一个模块里方便使用。代码方法事从数据库中读取数据后返回,利用console打印测试。但是控制台打出了undefined,应该是因为方法异步的原因。请问如何能解决呢?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| search_flight=function (mdate,fc,des) {
connection.query('select * from flight_info\n' +
' where date= "'+mdate+'"&& from_city="'+fc+'" && to_city= "'+des+'" ;',function (error, results, fields) {
if (error) throw error;
console.log(results[0]);
return results;
}
);
};
console.log(search_flight(lmdate,lfc,ldes));
//控制台的打印
undefined
RowDataPacket {
date: '2月8日',
fight_number: 'NH885',
time: '10:30',
from_city: '浦东国际机场',
to_city: '成田空港',
number: 100
} |
你需要理解Javascript的三种处理异步代码的方式,然后选择合适的方式:
- 回调
- Promise
- async/await
回调方式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| function search_flight(mdate,fc,des, callback) {
connection.query('select * from flight_info\n' +
' where date= "'+mdate+'"&& from_city="'+fc+'" && to_city= "'+des+'" ;',function (error, results, fields) {
if (error) throw error;
console.log(results[0]);
callback(results);
}
);
};
function test(){
search_flight(lmdate,lfc,ldes, function(results){
console.log(results);
});
}
test(); |
Promise 方式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| function search_flight(mdate,fc,des) {
return new Promise(function (resolve,reject){
connection.query('select * from flight_info\n' +
' where date= "'+mdate+'"&& from_city="'+fc+'" && to_city= "'+des+'" ;',function (error, results, fields) {
if (error) reject({err:1, msg:error});
resolve({err:0, results});
}
);
})
};
function test(){
search_flight(lmdate,lfc,ldes).then(function (ret){
if(!ret.err){
console.log(ret.results)
}
});
}
test(); |
异步函数方式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| async function search_flight(mdate,fc,des) {
return new Promise(function (resolve,reject){
connection.query('select * from flight_info\n' +
' where date= "'+mdate+'"&& from_city="'+fc+'" && to_city= "'+des+'" ;',function (error, results, fields) {
if (error) reject({err:1, msg:error});
resolve({err:0, results});
}
);
})
};
async function test(){
let ret = await search_flight(lmdate,lfc,ldes);
if(!ret.err){
console.log(ret.results)
}
}
test(); |