node.js - 如何从 Google Sheets API 访问回调函数的结果?

标签 node.js asynchronous google-api 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吗?

最佳答案

这个修改怎么样?请将此视为多个答案之一。

修改后的脚本:

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

来自:

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 不能使用。我认为即使删除了 key: apiKey ,脚本仍然可以工作。

引用:

如果这不是您想要的结果,我深表歉意。

关于node.js - 如何从 Google Sheets API 访问回调函数的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56324768/

相关文章:

javascript - 未能执行 objective-c om.github.eirslett :frontend-maven-plugin:1. 6:install-node-and-npm(安装 Node 和 npm)

javascript - 您是否对您开发的 Javascript API 包装器方法的参数执行任何验证?

asynchronous - 使用 nock 在异步操作创建者中测试 POST 请求

android - 在 Android 上获取 OAuth2 token 时 UNREGISTERED_ON_API_CONSOLE

android - 在没有客户经理的情况下在android中使用谷歌客户端API

javascript - 从本地文件夹上传并显示文件

node.js - 如何使用mongodb Node 包在mapReduce中打印

javascript - 如何识别ajax已提交请求但正在等待响应?

c# - 将 await 与 MessageDialog.ShowAsync() 一起使用时出错

java - 如何使用 Java 的 HTTP 客户端库设置应用程序名称?