【问题标题】:Google apps script - Function cannot call another function from auto triggerGoogle 应用程序脚本 - 函数无法从自动触发器调用另一个函数
【发布时间】:2020-10-27 04:48:03
【问题描述】:

我有一个从亚马逊提取数据的 API 函数,我需要分别有 'fetch' 和 'get' 报告功能来实现操作

  1. 向亚马逊请求获取报告,并且
  2. 从亚马逊获取报告,亚马逊完成获取请求并允许获取报告的请求操作大约需要 2 分钟,因此在脚本中我设置了 2 分钟后script.newtrigger
function fetchReportMarketListTrig() {
  fetchReportMarketList(true);
  ScriptApp.newTrigger("getReportsForAccountMarketListTrig")
  .timeBased()
  .after(2* 60 * 1000)
  .create();
  Logger.log("Report Request Created");
}

当我从menuitems 手动触发该功能时,该功能运行良好,getReportsForAccountMarketListTrig 将在 2 分钟后调用。但是,如果我设置了自动触发,fetchReportMarketListTrig 就不能调用getReportsForAccountMarketListTrig。我们需要寻找为什么工作表与手动触发和自动触发不同的答案。非常感谢!

Manual trigger from menuitems

Auto trigger set in google sheet time-driven trigger

Auto Trigger and Manual trigger execution result

【问题讨论】:

  • 你是怎么触发fetchReportMarketListTrig的?
  • 嗨@RafaGuillermo,非常感谢您的回复,我刚刚添加了我如何在标志中手动触发和自动触发fetchReportMarketListTrig 的屏幕截图。

标签: google-apps-script google-sheets


【解决方案1】:

答案:

你有两个同名的函数!当您为此函数创建触发器时,这会产生未定义的行为。

更多信息:

在您为触发器提供的屏幕截图中,您会看到以下警告:

同一项目中的函数必须始终具有唯一的名称!

想象一下下面的代码:

function doSomeMath() {
  var x = 1 + 2;
  console.log(x);
}

function doSomeMath() {
  var x = 100 + 200;
  console.log(x);
}

然后你让你的触发器运行函数doSomeMath()——它怎么知道你指的是哪一个?

修复:

这里的可能性是代码中的另一个函数 fetchReportMarketListTrig 是在基于时间的触发器上运行的函数,而不是您打算运行的函数。

要解决此问题,请在脚本文件中搜索名为 fetchReportMarketListTrig 的函数,然后重命名它们以使其唯一。然后,您可以像往常一样在您希望的功能上设置触发器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多