您的代碼是異步的,但是您正在同步調用它。
如果您想這樣做,您還需要將回調傳遞給SqlQuery
。
var SqlQuery = require(./path/to/sqlQueryFile);
var rows = SqlQuery('pass sql here', function(recordSet){
console.log(recordSet);
res.json(recordSet);
});
編輯:
/* pool -create connection pool mysql*/
var sqlQuery = function (sqlString, callback) {
var _result = pool.getConnection(function (err, connection) {
/* error handling*/
connection.query(sqlString, function (err, rows) {
console.log(this.sql);
if (!err) {
callback(rows);
}
connection.release();
});
});
};
module.exports = sqlQuery;
然後用調用它。如果你正在使用JavaScript的新版本,你有幾個選項。
如果您有機會獲得承諾,你可以這樣做:
function sqlQuery (sqlString) {
return new Promise((resolve, reject) => {
pool.getConnection(function (err, connection) {
if (err) { return reject(err); } // error handling
connection.query(sqlString, function (err, rows) {
if (err) { return reject(err); }
resolve(rows);
connection.release();
});
});
});
}
module.exports = sqlQuery;
然後你會使用它像:如果您使用甚至新的JavaScript
var SqlQuery = require(./path/to/sqlQueryFile);
SqlQuery('pass sql here')
.then(function(recordSet) {
console.log(recordSet);
res.json(recordSet);
})
.catch(function(err) {
// do your error handling
res.status(500).json({ err: 'Sorry there was an error' });
});
,你可以使用async/await語法(目前可以通過Babel獲得,我認爲可以在FireFox中使用V55中的Chrome)。
var SqlQuery = require(./path/to/sqlQueryFile);
async handleQuery(query) {
try {
var rows = await SqlQuery(query);
res.json(rows);
} catch (e) {
console.log('Error!', e);
}
}
把多個查詢一起:
async handleQuery(query) {
try {
return await SqlQuery(query);
} catch (e) {
console.log('Error!', e);
}
}
var rows = await handleQuery('select * from tablename');
var rowsToReturn = await handleQuery('select id from another_table where name = "' + rows[0].name + '"');
感謝大衛,所以當我有一個深度嵌套的回調,並希望得到的數據出來,就像在執行多個查詢的情況下,我只需要將數據包裝在回調中。它會看起來非常醜陋的代碼,有更清晰的方式嗎? –
@MoHassan查看我的編輯 – David
謝謝,有更多的選項可供選擇 –