当Google脚本中的一个表单响应没有响应时,如何处理if语句?

问题描述

我正在尝试创建一个脚本,当有人提交Google表单时发送电子邮件。该表单包括一个可选的文件上传,脚本随后将以pdf格式将其附加到电子邮件中。

我面临的问题是如果响应为空,如何忽略创建附件的过程。

下面的示例代码

function getIdFrom(url) {
  var id = '';
  var parts = url.split(
    /^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/
  );
  if (url.indexOf('?id=') >= 0) {
    id = parts[6].split('=')[1].replace('&usp','');
    return id;
  } else {
    id = parts[5].split('/');
    var sortArr = id.sort(function (a,b) {
      return b.length - a.length;
    });
    id = sortArr[0];
    return id; //returns google doc id.
  }
}

function onFormSubmit(response) {
  var link = response.namedValues['Upload file'];

  if (typeof link !== "undefined" && link.length > 0) { // I think it's here that's the issue
    var uploadFileId = getIdFrom(link[0]);
    var uploadFile = DriveApp.getFileById(uploadFileId);
    var uploadFileType = (function () {
      if (uploadFile.getMimeType().includes('image')) {
        return uploadFile.getMimeType();
      } else {
        return 'application/pdf';
      }
     };
    var attachArr = [uploadFile.getAs(uploadFileType)];
  } 
  // etc etc send email.
}

如果用户提交带有上传文件的表单,效果很好。

但是,如果提交表单时未在“上传文件”问题中输入任何内容,我会在假设的getIdFrom(url)函数处收到“ TypeError:无法读取未定义的属性'split'of undefined”,因为它仍然存在尝试通过link传递getIdFrom(),尽管由于它未定义而不应这样做。

奇怪的是,当我使用两个测试输入时,它工作得很好,其中一个上传文件”存在但为空,而另一个根本不存在。

我不确定我在这里缺少什么。

我也毫无疑问,这是一种凌乱的做事方式,但我要到达那里。

解决方法

  • response.namedValues['Upload file']是一个对象

  • 即使为空,其长度也至少为>0

解决方法

将您的if语句修改为

if (link[0].length > 0) { 
  ...
}