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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 08:15:03