首先,我感到很尴尬,仍然没有完全理解Javascript中的回调。我的简单代码假设等待mysql查询完成然后发送回Web客户端,但现在不按顺序。 这就是我所看到的:
第3步:未定义
第1步:约翰
第2步:[' John' ]
Q1:除了异步,我可以在app.get中做任何更好的方法(' / db1')?
Q2:在db.js中,是否需要异步?我确实看到样本没有异步连接/查询/结束,但认为这是文件io?
main.js
const express = require('express')
const app = express()
const port = 8080
var db1 = require("./db.js");
app.get('/', (request, response) => {
response.send('Hello from Express!')
})
app.get('/db1', (request, response) => {
var q1 = db1.query1();
console.log("step 3: " + q1);
response.send('Hello from db1! ' + q1);
})
app.listen(port, (err) => {
if (err) {
return console.log('something bad happened', err)
}
console.log(`server is listening on ${port}`)
})
db.js
var mysql = require('mysql');
var async = require('async');
var connection = mysql.createConnection({
host : 'localhost',
user : 'root',
password : '123.abc',
database : 'mydb'
});
var query1 = function() {
var q1 = "NA";
async.series([
function(callback) {
connection.connect();
connection.query('SELECT * from customer;',
function(err, rows, fields) {
if (err){
console.log("---- Not supposed to see this -----");
callback(true);
}
q1 = rows[0].name;
console.log('step 1: ', rows[0].name);
callback(null, q1);
});
},
],
function(err, result) {
connection.end();
if(err) {
return "NA";
} else {
console.log("step 2: ", result);
return result[0].name;
}
}
);
};
module.exports = {
query1: query1
};