Node.js没有在回调中执行最后一个表达式

问题描述 投票:1回答:1

我编写了这段代码来查询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模块有关?

javascript mysql node.js
1个回答
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));
© www.soinside.com 2019 - 2024. All rights reserved.