You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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;
}

额外排查点

  1. 控件配置对比:检查studentPicker和classPicker的定义,确认:
    • studentPicker是否为多选控件?移动端对多选控件未选择时可能返回null,桌面端返回空数组。
    • classPicker是否设置了默认选中值?若有默认值则不会出现null的情况。
  2. 移动端选中测试:测试移动端选中studentPicker后的返回值,若返回单个值而非数组,上述代码也能兼容这种场景。

内容的提问来源于stack exchange,提问作者Dennis Verhasselt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 00:05:11