我已编写此代码来查询节点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模块有关?
答案 0 :(得分:1)
使用我们从您的代码中获得的信息,它应该可以正常工作;看下面的代码片段。
似乎您的代码在执行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));