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

Node.js调用Snowflake查询函数返回undefined问题求助

Node.js调用Snowflake查询返回undefined的解决办法

你的代码核心问题是**connection.execute的回调逻辑与await不兼容**:

  • 你用await等待connection.execute的返回值,但该方法是回调驱动的,不会返回Promise,导致snow_data始终为undefined。
  • 回调函数里的return rows仅在回调内部生效,无法传递到外层的snow_data变量。

修复方案1:用Promise包装回调逻辑

将回调风格的查询转换为Promise,让await能正确捕获结果:

async function getSnowData() {
  return new Promise((resolve, reject) => {
    connection.execute({
      sqlText: 'SELECT * from snow_tbl;',
      complete: function(err, stmt, rows) {
        if (err) {
          reject(err); // 将错误抛出给外层catch处理
        } else {
          resolve(rows); // 将查询结果传递给await
        }
      }
    });
  });
}

app.get("/snowdata", async (req, res) => {
  try {
    const snow_data = await getSnowData();
    console.log(snow_data);
    res.send(snow_data); // 向前端返回查询结果
  } catch (error) {
    console.error('Error in main process:', error.message);
    res.status(500).send(error.message); // 错误时返回500状态码
  }
});

修复方案2:使用Snowflake SDK的Promise风格调用

若你的Snowflake Node.js SDK是较新版本,execute方法本身支持Promise(无需回调),可直接简化代码:

async function getSnowData() {
  // 直接await execute的Promise返回值,根据SDK结构提取rows
  const result = await connection.execute({
    sqlText: 'SELECT * from snow_tbl;'
  });
  return result.rows; // 部分SDK可能直接返回rows,需根据实际结构调整
}

app.get("/snowdata", async (req, res) => {
  try {
    const snow_data = await getSnowData();
    console.log(snow_data);
    res.json(snow_data); // 用JSON格式返回更规范
  } catch (error) {
    console.error('Error in main process:', error.message);
    res.status(500).json({ error: error.message });
  }
});

内容的提问来源于stack exchange,提问作者Okr100

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 12:25:06