首页 > 解决方案 > 如何从 Google Sheets API 访问回调函数的结果?

问题描述

我正在使用 Google Sheets API 来复制工作表,并且我想将新工作表的 ID 传递给变量。

我可以在回调函数中成功获取工作表 ID(使用result.data.sheetId),但我很难在函数之外使用它。

我正在使用async/await语法,并且我也尝试过utils.promisify,但没有运气!

async function copySheet(jwt, apiKey, spreadsheetId, range) {

  const sheets = google.sheets({ version: 'v4' });

  let newSheetId = await sheets.spreadsheets.sheets.copyTo({
    "spreadsheetId": spreadsheetId,
    "sheetId": 0,
    "auth": jwt,
    "key": apiKey,
    "resource": {
      "destinationSpreadsheetId": spreadsheetId,
    }
  }, function (err, result) {
    if (err) {
      throw err;
    }
    console.log(result.data.sheetId);
    return result.data.sheetId;
  });

  console.log(newSheetId);

}

第一个console.log显示我想要的数字,但第二个记录undefined

你有什么建议可以让我在回调函数之外使用 sheetId 吗?

标签: node.jsasynchronousgoogle-apigoogle-sheets-api

解决方案


这个改装怎么样?请认为这只是几个答案之一。

修改后的脚本:

请按如下方式修改您的脚本。

从:

let newSheetId = await sheets.spreadsheets.sheets.copyTo({
  "spreadsheetId": spreadsheetId,
  "sheetId": 0,
  "auth": jwt,
  "key": apiKey,
  "resource": {
    "destinationSpreadsheetId": spreadsheetId,
  }
}, function (err, result) {
  if (err) {
    throw err;
  }
  console.log(result.data.sheetId);
  return result.data.sheetId;
});

console.log(newSheetId);

至:

let res = await sheets.spreadsheets.sheets.copyTo({
  "spreadsheetId": spreadsheetId,
  "sheetId": 0,
  "auth": jwt,
  "key": apiKey,
  "resource": {
    "destinationSpreadsheetId": spreadsheetId,
  }
});

let newSheetId = res.data.sheetId;
console.log(newSheetId);

笔记:

  • 根据您的问题,我可以确认您已经能够使用 Sheets API。
  • spreadsheets.sheets.copyTo()使用 POST 方法。所以在这种情况下,不能使用 API 密钥。我认为即使key: apiKey被删除,脚本也可以工作。

参考:

如果这不是你想要的结果,我很抱歉。


推荐阅读