【问题标题】:Google Apps Script - Variable Passed Between Functions Shows Up as UndefinedGoogle Apps 脚本 - 在函数之间传递的变量显示为未定义
【发布时间】:2019-02-25 06:15:29
【问题描述】:

我有一些代码,其中有一些 if/else if 语句来确定 Google 表单关闭的原因。我想将此原因传递给另一个函数,该函数将发送一封电子邮件通知我表单已关闭以及原因。我不知道为什么应该是字符串的原因没有传递给发送电子邮件的函数。

我在这段代码中根本不处理表单。为简单起见,我打开了一个新的独立脚本,未链接到任何 Google 表单或工作表,仅测试这一部分(确定原因并发送电子邮件)。这是代码:

确定表单关闭原因并调用第二个函数发送电子邮件的第一个函数:

function FindReason() {
  var Day1Seats = 5;
  var Day2Seats = 5;
  var Day1Responses = 6;
  var Day2Responses = 1; 
  var FormClose = false;

  if(Day1Responses >= Day1Seats) {
    var reason = "All seats taken for Day 1";
    SendAnEmail(reason);
  }
  else if(Day2Responses >= Day2Seats) {
    var reason = "All seats taken for Day 2";
    SendAnEmail(reason);
    }
  else if(FormClose) {
    var reason = "Form close date";
    SendAnEmail(reason);
  }
}

第二个函数,发送邮件(邮件地址明显是为了隐私改的):

function SendAnEmail(closereason) {

  var recipientTO = "name@example.com";
  var subject = "This is the subject";
  //var closereason = "All seats taken for Day 1";

  MailApp.sendEmail({
    to: recipientTO,
    subject: subject,
    htmlBody: (new Date()) + "<br>Your form has been closed because: <br>" + closereason + "<br>End of message."
  });
}

当我运行 FindReason() 时,我确实收到了一封电子邮件,但正文没有正确显示原因。这是我收到的电子邮件示例:

2019 年 2 月 24 日星期日 12:26:01 GMT-0800 (PST)
您的表单已关闭,因为:
未定义
消息结束。

我不知道为什么原因显示为未定义。我尝试在 SendAnEmail 函数中设置原因(已被注释掉的行)并且工作正常,但我需要能够更改原因。

编辑:它现在可以工作了。原来“运行”按钮被设置为运行“SendAnEmail”功能而不是“FindReason”功能。感谢所有提供建议的人。

【问题讨论】:

  • if(FormClose = TRUE) { 是一个作业。试试if(FormClose)
  • 谢谢。我解决了这个问题,正如 Dan 在下面所建议的那样,但问题仍然存在。仍显示为未定义。
  • 你还没有更新所有的问题代码。
  • 我已经更新了问题代码。
  • 它现在对我有用。

标签: google-apps-script


【解决方案1】:

可能发生的是else if(FormClose = TRUE) 不起作用。

  1. = 是赋值运算符,你要相等,就是===
  2. TRUE在js中是小写的,所以你要true
  3. 你也使用False,应该是false

如果您查看 google 脚本编辑器的控制台,您应该会看到某种错误,因为它不知道 FalseTRUE 是什么(它会认为它们是未声明的变量)。

试试else if(FormClose === true),或者更简单的else if (FormClose),因为如果它的计算结果为真,那就可以了。

function FindReason() {
  var Day1Seats = 5;
  var Day2Seats = 5;
  var Day1Responses = 6;
  var Day2Responses = 1; 
  var FormClose = false;

  if(Day1Responses >= Day1Seats) {
    var reason = "All seats taken for Day 1";
    SendAnEmail(reason);
  } else if(Day2Responses >= Day2Seats) {
    var reason = "All seats taken for Day 2";
    SendAnEmail(reason);
  } else if(FormClose) {
    var reason = "Form close date";
    SendAnEmail(reason);
  }
}

【讨论】:

  • 我试过:“true”和“false”转小写,使用===
  • 抱歉,我是 Stack Overflow 的新手。我对上面的评论有疑问。而且我不确定 html 标签是否适用于 cmets。无论如何,我尝试将“true”和“false”更改为小写;使用“===”代替“=”;并且还尝试了“else if(FormClose)”。电子邮件仍将原因显示为未定义。
  • 当然,欢迎顺便说一句。只要将字符串传递给原因,您的函数就应该正确地工作。只是为了检查您的测试,您在编辑器中运行FindAReason,而不是SendAnEmail
  • 我以为我是。我以为它会运行代码顶部的第一个函数,但在您询问之后,我检查并没有,它被设置为“SendAnEmail”。我正忙于寻找代码中的错误,并没有想到要检查它。 羞愧地垂头 现在可以了。谢谢。
  • 太棒了!我无法告诉你我有多少次因为它不起作用而拆开代码,只是发现问题出在我的测试中,而不是我的代码。晚上好,欢迎来到 stackoverflow。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多