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

Node.js中如何返回Google Sheets API spreadsheets.values.get读取的值?

搞定异步问题:从Google Sheets获取数据并返回给主脚本

嘿,你遇到的这个undefined问题,核心原因是异步操作的执行顺序搞反了!让我给你拆解清楚,再给你靠谱的解决方案:

问题根源

sheets.spreadsheets.values.get是个异步API调用——它会先发送请求,然后等Google Sheets返回数据后才会执行你写的回调函数。但你在回调外面直接打印test的时候,这个回调还没跑呢!这时候test自然是undefined,而回调里的console.log(test1)能正常输出,是因为它等请求完成后才触发。

你之前试的直接赋值、返回值这些方法都没用,是因为回调函数是个独立的作用域,异步操作的结果没法同步“跳”到外部代码里。

最优修复:用Async/Await改写代码

Google Sheets API的方法其实支持Promise形式,只要你不传回调函数,它就会返回一个Promise。我们用async/await就能让代码看起来像同步的,轻松拿到返回值:

async function extractValsTest(auth) {
  const sheets = google.sheets({version: 'v4', auth});
  const request = {
    spreadsheetId: '你的表格ID', // 替换成实际的表格ID
    range: 'A1:B1'
  };

  try {
    // 等待API请求完成,拿到响应结果
    const response = await sheets.spreadsheets.values.get(request);
    const test1 = String(response.data.values).split(',');
    
    console.log(test1);
    console.log('Test = ' + test1);
    return test1; // 现在这个返回值能被外部函数正确获取
  } catch (err) {
    console.error('获取数据出错了:', err);
    throw err; // 把错误抛出去,让外部代码统一处理
  }
}

调用这个函数的时候,也要用await或者.then()来拿到结果:

// 示例:在主脚本里调用函数
extractValsTest(你的Auth对象)
  .then(result => {
    // 这里就能拿到你要的字符串数组,传给其他函数处理啦
    console.log('主脚本拿到的结果:', result);
    // 比如调用你的其他处理函数:processData(result);
  })
  .catch(err => {
    // 处理错误情况
  });

关于换用其他HTTP客户端的思路

如果你想换用Axios这类HTTP客户端,核心是搞定Google的OAuth2授权,拿到有效的access token,然后直接调用Sheets API的REST端点:

  1. 先用google-auth-library库获取access token(和你现在初始化auth的逻辑一致)
  2. 用Axios发起GET请求:
const axios = require('axios');

async function extractValsWithAxios(accessToken, spreadsheetId, range) {
  try {
    const response = await axios.get(
      `https://sheets.googleapis.com/v4/spreadsheets/${spreadsheetId}/values/${range}`,
      {
        headers: {
          'Authorization': `Bearer ${accessToken}`
        }
      }
    );
    const test1 = String(response.data.values).split(',');
    return test1;
  } catch (err) {
    console.error('请求出错:', err);
    throw err;
  }
}

这样就能绕开googleapis库,直接用HTTP客户端请求,但授权部分还是得依赖Google的工具来处理,不然容易踩坑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:04:38