Я пытаюсь получить информацию об устройствах 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.');
}
}