Значение чтения nodejs в электронной таблице Google с помощью await / async - PullRequest
0 голосов
/ 20 марта 2019

Я использую цикл for, чтобы перебрать листы в электронной таблице Google и получить доступ к определенной ячейке на каждом листе.У меня есть таблица Google с пятью листами Sheet1, Sheet2, .., Sheet5.Значение, если ячейка, которую я читаю, это Value1, ..., Value5.Я надеюсь, что результаты будут отображаться следующим образом:

Sheet1
Value1
Sheet2
Value2
:
Sheet5
Value5

Однако я получаю:

Sheet1
Undefined
Sheet2
Undefined
:
Sheet5
Undefined
Value1
Value2
:
Value5.

Я понимаю, что мне нужно использовать async / await, но не могу понять сразус google.spreadsheet.get.Заранее спасибо за любые рекомендации.Мой код:

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
      }
    }
  )
}

1 Ответ

1 голос
/ 21 марта 2019

Если вы хотите использовать async / await вместо обратных вызовов, вы можете это сделать, потому что googleapi возвращает Promise . Эти Обещания являются основой async / await и были тем, что было раньше. Если вы используете async / await или Promises, ваш код будет намного легче читать и понимать.

Так что вместо звонка:

sheets.spreadsheets.get({
  auth: auth,
  spreadsheetId: sheet_id
},
(err, response) => {
  if (err) console.log('The API returned an error: ' + err)
});

Вы можете позвонить:

try {
  const response = sheets.spreadsheets.get({
    auth: auth,
    spreadsheetId: sheet_id
  });
}
catch(err) {
  console.log('The API returned an error: ' + err);
}

Дело в том, что вы можете использовать ключевое слово await только в функциях async. Вы можете прочитать больше об async / await здесь .

...