Node.js中如何在辅助函数里await并返回PostgreSQL查询结果?
正确实现Node.js+pg库查询PostgreSQL并返回结果
问题分析
第一个函数的问题
selectEnvelope直接同步返回envelope数组,但pool.query是异步操作(返回Promise),then回调里的赋值逻辑会在函数返回后才执行,所以返回的是空数组。
第二个函数的问题
你的async/await版本函数本身是正确的,控制台能打印结果说明查询逻辑没问题。但调用时得到pending状态的Promise,是因为所有async函数的返回值都会被自动包装成Promise,直接拿返回值只能拿到Promise对象,必须通过await或.then()才能获取实际的查询结果。
正确实现方案
优化后的查询函数
可以直接返回查询结果里的rows(这是你需要的数据),同时保留错误处理:
async function selectEnvelope(name) { try { const queryResult = await pool.query('SELECT * FROM envelopes WHERE name = $1', [name]); return queryResult.rows; } catch (err) { console.error('数据库查询错误:', err); throw err; // 抛出错误让调用方处理 } }
正确调用方式
方式1:在async函数中用await调用
async function handleEnquiry() { try { const envelopeData = await selectEnvelope('你的查询名称'); console.log('获取到的信封数据:', envelopeData); // 在这里处理查询到的数据 } catch (err) { // 处理查询失败的情况 } } handleEnquiry();
方式2:用Promise的then/catch调用
如果不在async函数中,就用传统的Promise链式调用:
selectEnvelope('你的查询名称') .then(envelopeData => { console.log('获取到的信封数据:', envelopeData); // 处理数据 }) .catch(err => { console.error('查询失败:', err); });
内容的提问来源于stack exchange,提问作者masutuda
相关产品推荐
相关产品推荐

