我编写了这段代码来查询Node 8中的MySQL数据库:
const getDB = require('./db');
function getCrawls(cb) {
const db = getDB();
const rows = db.query('select * from crawls', (err, result) => {
console.log('got result', result);
cb(result);
});
}
getCrawls(c => console.log('done', c));
但是,我运行时只获得以下输出:
got result []
现在奇怪的是,如果我在调用回调后添加另一个console.log
它是有效的:
const getDB = require('./db');
function getCrawls(cb) {
const db = getDB();
const rows = db.query('select * from crawls', (err, result) => {
console.log('got result', result);
cb(result);
console.log('complete');
});
}
getCrawls(c => console.log('done', c));
现在我得到这个输出:
got result []
done []
似乎没有调用查询回调的最后一个语句,是否有人知道为什么会发生这种情况?
编辑:
这是getDB的代码
const mysql = require('mysql');
function getDB() {
const db = mysql.createConnection({
host: process.env.MYSQL_HOST,
user: process.env.MYSQL_USER,
password: process.env.MYSQL_PASSWORD,
database: process.env.MYSQL_DATABASE,
})
db.connect();
return db;
}
module.exports = getDB;
听起来这个错误可能与MySQL模块有关?
使用我们从您的代码中获得的信息,它应该工作正常;看下面的片段。
看来你的代码卡在执行cb(result);
可能有一个未捕获的异常吗?
function query(data, callback) {
setTimeout(() => {
callback(false, ['result']);
}, 1000);
}
function getCrawls(cb) {
const rows = query('select * from crawls', (err, result) => {
console.log('got result', result);
cb(result);
console.log('complete');
});
}
getCrawls(c => console.log('done', c));