javascript - 函数返回未定义的结果
问题描述
我正在尝试使用服务帐户为最终用户填充电子表格。
我正在使用此脚本来获取 ChromeOS 设备:
function listChromeOSDevices_(accessToken) {
var devices = [];
var pageToken;
do {
var params = {
method: 'get',
headers: {
Authorization: 'Bearer ' + accessToken
}
};
var url =
'https://www.googleapis.com/admin/directory/v1/customer/my_customer/devices/chromeos?projection=full&orderBy=status&sortOrder=ascending&maxResults=100';
if (pageToken) {
url += '&pageToken=' + pageToken;
}
var urlResponse = UrlFetchApp.fetch(url, params);
var jsonContent = JSON.parse(urlResponse.getContentText());
devices = devices.concat(jsonContent.chromeosdevices);
pageToken = jsonContent.nextPageToken;
} while (pageToken);
return devices;
}
然后尝试对结果执行此操作:
function main() {
var userEmail = 'admin@email.com';
var accessToken = getOAuthToken(userEmail);
var chromeOSDevices = listChromeOSDevices_(accessToken);
var date = new Date().toLocaleDateString();
var outputTableHeaders = [
'Date and Duration of Usage',
'Asset ID',
'Location',
'User',
'Admin Notes',
'Firmware Version',
'Last Synchronised',
'MAC Address',
'Device Model',
'Serial Number',
'OS Version',
'Platform Version',
'Device Status',
'OU Path'
];
var deviceResults = [outputTableHeaders].concat(
chromeOSDevices.map(function(device) {
device = fillInMissing_(device);
device.activeTimeRanges = sortArrByDateElement_(
device.activeTimeRanges,
'asc'
);
return [
dateConv_(
device.activeTimeRanges[device.activeTimeRanges.length - 1].date
) +
' for ' +
msToReadable_(
device.activeTimeRanges[device.activeTimeRanges.length - 1]
.activeTime
),
device.annotatedAssetId,
device.annotatedLocation,
device.annotatedUser,
device.notes,
device.firmwareVersion,
device.lastSync,
device.macAddress,
device.model,
device.serialNumber,
device.osVersion,
device.platformVersion,
device.status,
device.orgUnitPath
];
})
);
}
但是,我收到错误消息TypeError: Cannot call method "hasOwnProperty" of undefined.
dateConv_ 和 msToReadable_ 函数是辅助函数 - 但它们不是问题(已删除它们并有同样的问题)。
在主代码中注销 chromeOSDevices 时,它会按预期返回设备(据我所知)。
但是,当尝试使用 map 时,结果几乎就像丢失了任何其他属性一样。对此有点茫然,因为它对我来说看起来不错!
我以前使用相同的方法来输出结果AdminDirectory.Chromeosdevices.list
(所以我知道地图正在工作),但是需要为我们的一些用户使用服务帐户,这些用户没有运行脚本所需的访问级别,这就是它倒下的地方。
任何人都能够弄清楚为什么?因为我坐在那里看了一两个小时,什么都没有……
编辑
从脚本中删除辅助函数我仍然得到错误:TypeError: Cannot read property "annotatedAssetId" from undefined.
编辑 2
像这样注销:
for (var index in chromeOSDevices) {
Logger.log("INDEX: %s - The user is : %s",index,chromeOSDevices[index].annotatedUser)
}
我得到这个回复:回复@pastebin
解决方案
推荐阅读
- elasticsearch - 如果不在一定范围内,则进行弹性查询
- r - 刻面自由刻度“y”不适用于双轴
- elasticsearch - 弹性搜索基于嵌套字段值应用提升
- html - 使用 CSS 对齐时间轴上的按钮时出现问题
- python - sklearn StackingClassifier 和样本权重
- python - 在 Local Outlier Factor 中定义 Minpts 参数
- amazon-web-services - 当我尝试更改它时,EC2 实例错误告诉我附加了多个 IAM 角色...?
- python - 根据样式过滤 Pandas DataFrame
- java - 如何在 Heroku 中使用外部库运行 Java/Maven 应用程序?
- c++ - 如何来回移动演员 虚幻引擎