Google Apps Script插件移动端TypeError:无法读取undefined的forEach属性
问题分析与解决方案
核心问题
移动端Gmail插件中,e['formInputs']['studentPicker']返回null,而桌面端返回数组,导致调用forEach时抛出TypeError。classPicker能正常运行,大概率是两个控件的配置或移动端对其返回值的处理逻辑不同——比如classPicker有默认选中值,或是单选控件,移动端返回单个值而非null。
修复代码
在调用forEach前,先对studentsToMail做空值和数组格式校验,统一转为数组格式,避免报错:
function addEmailsOfStudentsToBCC(e) { let studentsToMail = e['formInputs']['studentPicker']; let toRecipients = []; // 处理移动端可能返回null或非数组的异常情况 if (!studentsToMail) { studentsToMail = []; } else if (!Array.isArray(studentsToMail)) { // 适配移动端单选控件返回单个值的场景 studentsToMail = [studentsToMail]; } studentsToMail.forEach((selectedItem) => { var listOfEmails = getMaillistFromClass(selectedItem); toRecipients.push(listOfEmails); }); var response = CardService.newUpdateDraftActionResponseBuilder() .setUpdateDraftBccRecipientsAction( CardService.newUpdateDraftBccRecipientsAction() .addUpdateBccRecipients(toRecipients) ) .build(); return response; }
额外排查点
- 控件配置对比:检查
studentPicker和classPicker的定义,确认:studentPicker是否为多选控件?移动端对多选控件未选择时可能返回null,桌面端返回空数组。classPicker是否设置了默认选中值?若有默认值则不会出现null的情况。
- 移动端选中测试:测试移动端选中
studentPicker后的返回值,若返回单个值而非数组,上述代码也能兼容这种场景。
内容的提问来源于stack exchange,提问作者Dennis Verhasselt
相关产品推荐
相关产品推荐

