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

JS中await调用PostgreSQL查询未按预期执行,函数提前返回问题

问题根因

你混用了回调函数和async/await两种异步处理方式:当你给db_adm_conn.query传入回调参数时,该方法不会返回Promise对象,await没有实际等待效果,代码会直接执行后续的打印和返回逻辑,等数据库查询完成触发回调时,函数已经执行完毕,所以会出现line为undefined的情况。

修复代码
async function create_base_config(user_id, service_id, timer_seconds) {
    try {
        // 采用参数化查询传递参数,避免SQL注入风险
        const result = await db_adm_conn.query(
            `INSERT INTO base_config (user_id, service_id, timer_seconds)
            VALUES ($1, $2, $3) RETURNING id;`,
            [user_id, service_id, timer_seconds]
        );
        const line = result.rows;
        console.log("line2 : " + line);
        return { ret_value: true, line_value: line };
    } catch (err) {
        console.log("line2 err : " + err);
        return { ret_value: false, line_value: err };
    }
}
修改说明
  • 移除query方法的回调参数,直接用await接收query返回的Promise执行结果,保证数据库查询完成后才会执行后续逻辑
  • 用try/catch捕获查询错误,替代原有回调内的错误处理逻辑
  • 将原有的字符串拼接传参改为pg库支持的$n占位符参数化查询,避免SQL注入漏洞,同时避免特殊字符导致的SQL语法错误

内容的提问来源于stack exchange,提问作者ImCookiieZ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 00:54:01