Вызов API скрипта Служб Google возвращает сообщение об ошибке «Ошибка ввода: не удается прочитать свойство« 0 »неопределенного значения», чтобы вернуть пустое поле » - PullRequest
0 голосов
/ 05 марта 2020

Я пытаюсь получить информацию об устройствах Chromebook, используя Google API. Я знаю, что некоторые устройства не будут иметь недавних пользователей, поэтому я ожидаю, что это поле будет пустым. Когда я включил строки для device.recentUsers [0] .email, он пошел go на некоторое время, а затем, когда он нажал «undefined», остановился и выдал это сообщение «TypeError: Невозможно прочитать свойство« 0 »из undefined» - Я изменил поле на «device.recentUsers», чтобы увидеть, что оно вернуло, и оно показывает, что все поле «неопределено».

В документации Google API определено поле «весь», как показано ниже. Мне нужен только бит электронной почты Итак, «device.recentUsers [0] .email»

"recentUsers": [
    {
      "type": string,
      "email": string
    }

Как я могу получить поле электронной почты, чтобы вернуться просто «пусто»? Я запустил тест для извлечения первых трех столбцов и «device.recentUsers» без бита «[0] .mail». Из результатов я мог получить количество «неопределенных» строк. Итак, я знаю общее количество записей и ожидаемую разбивку того, сколько из них должно иметь пустые электронные письма.

Проверка полей для контента, подобного этому

if ((device.status == 'ACTIVE') && (device.recentUsers) && (device.activeTimeRanges)) {

ограничивает вывод, и я не делаю хочу сделать два вызова в базу данных, если я могу избежать этого. Выполнение чего-то подобного вернуло синтаксическую ошибку

          if (device.recentUsers) {
            device.recentUsers[0].email,
          } else {
            device.recentUsers = 'BLANK',
          }

Мой скрипт здесь с оператором if, упомянутым выше, без комментариев, он прекрасно работает, но мне нужны и другие строки!

function listDevices() {

  var deviceArray = [];
  var pageToken;
  var page;
  do {
      page = AdminDirectory.Chromeosdevices.list(
      'my_customer',
      {
      maxResults: 100,
      pageToken: pageToken
      });

    var devices = page.chromeosdevices;
      if (devices) {
        for (i = 0; i < devices.length; i++) {
        var device = devices[i];
          //if ((device.status == 'ACTIVE') && (device.recentUsers) && (device.activeTimeRanges)) {
          var row = [
            device.serialNumber,
            device.annotatedAssetId,
            device.status,
            device.recentUsers[0].email,
            device.activeTimeRanges[0].date
            ];
            //Logger.log(device.serialNumber,device.annotatedAssetId,device.status,device.recentUsers[0].email, device.activeTimeRanges[0].date);
          deviceArray.push(row);
          // } 
        } 
      }  
    pageToken = page.nextPageToken;
  } while (pageToken);
  if (deviceArray.length > 0) {
    var spreadsheet = SpreadsheetApp.create('TEST Device List');
    var sheet = spreadsheet.getActiveSheet();

     // Append the headers.
    var headers = ['SerialNo', 'AssetTag', 'Status', 'LastUserEmail', 'LastDate'];
    sheet.appendRow(headers);

    // Append the results.
    sheet.getRange(2, 1, deviceArray.length, headers.length).setValues(deviceArray);

    Logger.log('TEST Device List spreadsheet created: %s', spreadsheet.getUrl());
 } else {
    Logger.log('No results returned.');
  }
}

1 Ответ

1 голос
/ 06 марта 2020

Я понял, как справиться с этим, используя функцию typeof (). Я изменил приведенный выше код if, если закомментировал следующее:

if ((devices.length < i) || (typeof(device.recentUsers)=='undefined') || (typeof(device.activeTimeRanges)=='undefined')) {
   var row = [
      device.serialNumber,
      device.annotatedAssetId,
      device.status,
      '',
      ''
   ];
} else {
    var row = [
      device.serialNumber,
      device.annotatedAssetId,
      device.status,
      device.recentUsers[0].email,
      device.activeTimeRanges[0].date
   ];          
} 
deviceArray.push(row);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...