首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >nodejs使用await/async读取google电子表格中的值

nodejs使用await/async读取google电子表格中的值
EN

Stack Overflow用户
提问于 2019-03-21 02:54:11
回答 1查看 1.7K关注 0票数 1

我使用for-loop遍历google电子表格中的表格,并访问每个表格中的特定单元格。我有一个谷歌电子表格,有五张表Sheet1,Sheet2,..、Sheet5.如果我正在读取的单元格是Value1,...,Value5,则值。我希望得到如下结果:

代码语言:javascript
运行
复制
Sheet1
Value1
Sheet2
Value2
:
Sheet5
Value5

然而,我得到了:

代码语言:javascript
运行
复制
Sheet1
Undefined
Sheet2
Undefined
:
Sheet5
Undefined
Value1
Value2
:
Value5.

我意识到我需要使用async/await,但不能立即使用google.spreadsheet.get。提前感谢您的指导。我的代码:

代码语言:javascript
运行
复制
function getData (auth) {
  var sheets = google.sheets('v4')
  sheets.spreadsheets.get(
    {
      auth: auth,
      spreadsheetId: sheet_id
    },
    (err, response) => {
      if (err) console.log('The API returned an error: ' + err)
    }
  )
  var no_sheets = response.data.sheets.length

  for (var i = 0; i < no_sheets; i++) {
    try {
      console.log(response.data.sheets[i].properties.title)
      var sheet_title = response.data.sheets[i].properties.title
      var cell_value = getCellValue(auth, sheet_title)
      console.log(cell_value)
    } catch (err) {
      console.log(err)
      continue
    }
  }
}

function getCellValue (auth, sheet_title) {
  sheets.spreadsheets.values.get(
    {
      auth: auth,
      spreadsheetId: sheet_id,
      range: sheet_title + '!A1:A1'
    },
    (err, response) => {
      if (err) {
        console.log('The API returned an error: ' + err)
        return
      }
      var rows = response.data.values
      if (rows.length === 0) {
        console.log('No data found.')
      } else {
        for (var i = 0; i < rows.length; i++) {
          var cell_value = rows[i]
        }
        console.log(cell_value)
        return cell_value
      }
    }
  )
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-21 20:46:05

如果你想使用async/await而不是回调,你可以,因为googleapi会返回一个Promise。这些承诺是异步/等待的基础,也是以前的goto。如果你使用async/await或者Promises,你的代码将更容易阅读和理解。

因此,与其调用:

代码语言:javascript
运行
复制
sheets.spreadsheets.get({
  auth: auth,
  spreadsheetId: sheet_id
},
(err, response) => {
  if (err) console.log('The API returned an error: ' + err)
});

您可以拨打:

代码语言:javascript
运行
复制
try {
  const response = sheets.spreadsheets.get({
    auth: auth,
    spreadsheetId: sheet_id
  });
}
catch(err) {
  console.log('The API returned an error: ' + err);
}

问题是,您只能在async函数中使用await关键字。您可以阅读有关async/await here的更多信息。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55268216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档