在NodeJS中使用mysql查询的时间问题

我在nodejs中使用mysql模块。

我想要做这样的事情,但问题是,查询的callback是asynchronous的,我不能正确地填充结果数组..我该怎么办? 谢谢!

function fn(callback) { client.query( 'SELECT * FROM imbarcazioni', function select(err, ships) { if(err) { throw err; } ships.forEach(function(ship) { client.query( 'SELECT * FROM storico_imbarcazioni WHERE id_imbarcazione=' + ship.id, function select(err, hist) { ship.history = hist; } ); }); callback(hist); }); } 

像往常一样,我build议这些东西asynchronous 。 在这里,你可以使用async.map :

 function selectHistory(ship, callback) { client.query('SELECT * FROM storico_imbarcazioni WHERE id_imbarcazione = ?', [ship.id], function(err, history) { if(err) return callback(err); ship.history = history; callback(null, ship); }); } client.query('SELECT * FROM imbarcazoni', function(err, ships) { async.map(ships, selectHistory, function(err, ships) { // ships is an array with each ship along with it's history }); }); 

这就是说,对于您的特定示例,我宁愿使用JOIN并在SQL中处理它:

 SELECT * FROM imbarcazioni LEFT JOIN storico_imbarcazoni ON storico_imbarcazoni.id_imbarcazione = imbarcazioni.id