好的,所以我需要通過SSH連接到一個MySQL資料庫,連接作業正常。我能夠毫無問題地執行查詢。我也可以得到結果并列印出來。問題是,我需要一些更簡單的東西,因為我將不得不向這個資料庫發送大量的查詢。下面是一個承諾的代碼,它創建了一個與該資料庫的連接。
const SSHConnection = new Promise((resolve, reject) => {
sshClient.on('ready', () => {
sshClient.forwardOut(
forwardConfig.srcHost,
forwardConfig.srcPort,
forwardConfig.dstHost,
forwardConfig.dstPort,
(err, stream) => {
if (err) reject(err);
const updatedDbServer = {
...dbServer。
流
};
const connection = mysql.createConnection(updateDbServer);
connection.connect((error) => {
if (error) {
reject(error); // 回傳 error
}
resolve(connection); / OK : return connection to database
});
});
}).connect(tunnelConfig)。
});
然后我有了這段代碼,讓我能夠訪問上述連接,并允許我發送查詢。問題是,我需要我的查詢的回傳值,并且能夠在我的專案的其他模塊中使用它。例如,匯出一個單一的函式,用于發送查詢,如sendQuery('Enter SQL here').
function sendQuery(sql) {
SSHConnection.then(
function(connection) {
connection.query(
sql,
function(err, results, fields) {
return results; / <---------- 我想從函式'sendQuery()'回傳這個。
}
);
},
function(error) {
console.log(" Something wrong happened")。
}
);
}
我可以在SSHConnection.then()中處理結果,但這對我來說并不實用。
我希望能有類似的東西來作業。
//Main function。
(async function(){
let res = sendQuery(`SELECT 23 2 AS Sum;`) 。
console.log(res); // Outputs Sum: 25.
})();
因此,對于我的問題。是否有辦法從外部訪問promise.then()中的查詢結果?
uj5u.com熱心網友回復:
我認為問題在于你需要在你的代碼中增加一個回傳陳述句。
function sendQuery(sql) {
return SSHConnection.then(
function(connection) {
return connection.query(
sql。
function(err, results, fields) {
return results; / <---------- 我想從函式'sendQuery()'回傳這個。
}
);
},
function(error) {
console.log(" Something wrong happened")。
}
);
}
如果 connection.query 回傳一個 promise,這應該能正確回傳查詢結果。我不確定它是否如此。如果是的話,你可以像這樣執行這個函式。
//Main function。
(async function(){
let res = await sendQuery(`SELECT 23 2 AS Sum;`) 。
console.log(res); // Outputs Sum: 25.
})();
如果connection.query沒有回傳一個promise,那么我想你可以用一個promise來包裝它,就像這樣
。function sendQuery(sql){
return SSHConnection.then(
function (connection) {
return new Promise((resolve, reject) => /span> {
connection.query(
sql,
function ( err, results, fields) {
if (err)reject(err)
resolve(results) // <---------- 我想從函式'sendQuery()'回傳這個。
}
)
})
},
function (error) {
console.log(' Something wrong happened')
}
)
}
uj5u.com熱心網友回復:
順便說一句,喜歡這個名字......真的很喜歡那部電影。 至于你的問題,我有幾條建議:
如果你有大量的查詢,你可以考慮將連接獨立于查詢,這樣連接的設定和拆除就不是查詢本身的時間成本的一部分。 如果你有一個單一的連接、單一的 DB 等,那么你可以在啟動時將連接實體化一次,然后讓連接保持開放,并在你的查詢中參考它。
你的問題:
function sendQuery(sql) {
const resValues = await SSHConnection.then(
function(connection) {
connection.query(
sql,
function(err, results, fields) {
return results; / <---------- 我想從函式'sendQuery()'回傳這個。
}
);
},
function(error) {
console.log(" Something wrong happened")。
}
);
return(resValues); //或處理錯誤情況。
}
注意我從".then() "呼叫中添加了一個回傳值,它捕獲了你的 "結果 "回傳值,然后從父函式(sendQuery)中回傳該值
。轉載請註明出處,本文鏈接:https://www.uj5u.com/net/306806.html
標籤:
上一篇:MySQL根據一個條件連接兩個表
