Node.js不执行回调中的最后一个表达式

时间:2018-09-04 12:45:05

标签: javascript mysql node.js

我已编写此代码来查询节点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模块有关?

1 个答案:

答案 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));