Как получить доступ к результату функции обратного вызова из API Google Sheets? - PullRequest
1 голос
/ 27 мая 2019

Я использую API Google Sheets для копирования листа и хочу передать идентификатор нового листа в переменную.

Я могу успешно получить идентификатор листа в функции обратного вызова (используя 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 вне обратного вызовафункционировать?

1 Ответ

1 голос
/ 27 мая 2019

Как насчет этой модификации?Пожалуйста, подумайте об этом как об одном из нескольких ответов.

Модифицированный скрипт:

Пожалуйста, измените ваш скрипт следующим образом.

От:

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 удален, скрипт работает.

Ссылка:

Если это не тот результат, который вы хотите, я прошу прощения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...