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
相关产品推荐
相关产品推荐

