You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何封装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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 19:24:01