如何封装SSH通道下的MySQL查询函数,获取Promise.then内的返回结果
改造方案
你需要将sendQuery改造为返回Promise的异步函数,同时将回调风格的connection.query封装为Promise结构,即可通过await直接获取返回结果:
1. 改造sendQuery函数
function sendQuery(sql) { // 外层返回Promise,供外部调用时await return SSHConnection .then(connection => { // 封装回调式的query为Promise return new Promise((resolve, reject) => { connection.query(sql, (err, results, fields) => { if (err) return reject(err); resolve(results); }); }); }) .catch(error => { console.log("Something wrong happened", error); // 抛出错误让外层可以自定义捕获处理 throw error; }); }
2. 调整调用方式
异步返回的Promise必须搭配await才能拿到同步写法的返回值,同时建议增加错误捕获逻辑:
// Main function (async function() { try { let res = await sendQuery(`SELECT 23+2 AS Sum;`); console.log(res); // 输出 Sum: 25 } catch (err) { // 自定义处理查询错误 console.error('查询执行失败', err); } })();
补充说明
你原本定义的SSHConnection是单例Promise,只会在首次调用时建立SSH隧道和数据库连接,后续所有sendQuery调用都会复用已经建立好的连接,符合你批量查询的性能需求。
内容的提问来源于stack exchange,提问作者BobLee
相关产品推荐
相关产品推荐

