在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