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

如何从Promise中获取信息并返回值而非打印?附MSSQL代码示例

如何从mssql的Promise操作中返回结果值

我帮你调整一下代码,让它能正确从Promise里返回你需要的ID值,而不是只在内部处理。先梳理下你原有代码里的几个可以优化的点:

  • 你当前getCurrentId里resolve的是整个data.recordset,但实际上SCOPE_IDENTITY()返回的是单个ID值,我们可以直接提取这个值返回
  • 代码格式过于紧凑,整理后可读性会好很多
  • main函数里有个多余的enter code here需要删掉

下面是修正后的完整代码:

function getCurrentId() {
  // 定义查询语句:插入空path后获取当前插入的ID
  const query = "INSERT INTO photos (path) VALUES (''); SELECT SCOPE_IDENTITY() AS id;";
  const request = new mssql.Request(connection);

  return new Promise((resolve, reject) => {
    request.query(query, (err, data) => {
      if (err) {
        // 别忘了处理错误,否则reject不会被触发,外部无法捕获异常
        return reject(err);
      }
      // 提取结果集中第一个对象的id属性,直接返回具体数值
      resolve(data.recordset[0].id);
    });
  });
}

// 修正后的main函数
const main = async () => {
  try {
    // 通过await获取getCurrentId的Promise返回值
    const newPhotoId = await getCurrentId();
    // 这里直接返回这个ID,外部调用main时就能拿到该值
    return newPhotoId;
  } catch (err) {
    // 处理可能出现的数据库错误
    console.error('获取ID失败:', err);
    throw err; // 如果需要外部处理错误,这里抛出异常即可
  }
};

// 调用main函数的示例:
// main()
//   .then(id => console.log('新插入的照片ID:', id))
//   .catch(err => console.error('操作出错:', err));

关键说明

  1. 精准返回值:把resolve(data.recordset)改成resolve(data.recordset[0].id),让Promise直接返回插入后的ID数值,而非整个结果集
  2. 错误处理:添加了err判断并调用reject(err),避免错误被静默吞掉,外部可以通过catch捕获异常
  3. 外部获取值:main函数返回的是Promise对象,外部可以通过.then()拿到返回的ID,或者在另一个async函数里用await直接获取,比如:
async function handlePhotoUpload() {
  try {
    const photoId = await main();
    // 这里就可以用photoId做后续操作,比如关联其他表、返回给前端等
    console.log('拿到新照片ID:', photoId);
  } catch (err) {
    // 统一处理错误
  }
}

这样就能真正获取到Promise里的返回值,而不是只在内部处理啦。

内容的提问来源于stack exchange,提问作者Дмитрий Литвин

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:30:44