JS使用Promise执行SQL查询后获取结果返回[object Promise]问题求解
问题产生原因
- 所有被
async关键字修饰的函数,执行后返回值都是Promise对象,未经过await或者.then()处理直接打印该返回值,就会输出[object Promise]而非异步执行的实际结果。 - 你封装的Promise内部缺少状态变更逻辑:SQL查询成功时没有调用
res()将查询结果抛出,查询出错时也没有调用rejects()抛出错误,就算后续添加了await逻辑,该Promise也会永远处于pending状态,无法返回任何结果。
修复代码
async function Testing() { // 修正Promise逻辑,正确处理查询的成功与失败场景 return new Promise((res, rejects) => { db.query("SELECT * FROM `nitrоboost`", (error, row) => { if (error) { // 出错时将Promise状态改为rejected,抛出错误信息 return rejects(error); } // 成功时将Promise状态改为fulfilled,返回查询结果 res(row); }); }); } // 调用时通过.then获取异步执行结果,兼容性更高 Testing().then(message => { console.log(`result`, message); }).catch(error => { console.error('SQL查询出错:', error); }); // 若运行环境支持顶层await(Node.js >=14.8 且使用ES模块规范),也可以用以下写法 // let message = await Testing(); // console.log(`result`, message);
核心修改点
- 补充Promise内部的状态变更逻辑,确保查询结果和错误都能正常抛出。
- 调用异步函数时,通过
.then()或者await等待异步操作执行完成后,再读取返回结果。
内容的提问来源于stack exchange,提问作者lewis
相关产品推荐
相关产品推荐

