【发布时间】:2018-10-02 07:00:07
【问题描述】:
在使用客户端 .HTML 文件时,在 Google 应用程序脚本中,您可以使用 google.script.run.(函数名称)调用服务器端脚本。
您可以在此处查看相关文档:https://developers.google.com/apps-script/guides/html/reference/run
现在,该脚本在其生命周期的前 6 个月左右一直在运行,没有出现任何问题。我没有接触过该程序,也没有收到通知或找到任何新弃用的代码。
然而,在过去几个月的过程中,我的用户一直报告说,当他们完成与 HTML 文档的交互时,关闭它时什么也没有发生,他们必须重复整个过程 3 次甚至有时甚至 4 次才能完成会得到它通过。, 这意味着当用户关闭客户端的 HTML 窗口时,应该调用服务器端的函数来处理剩余的任务,但在某些情况下不是这样。这个问题完全是随机的,似乎不是由任何特定原因引起的。
我自己已经采取了一些措施来尝试解决这个问题。我已将全部代码包装在 try catch 块中,包括 .HTML 和 .GS 文件。这意味着如果在 ANY 脚本中确实出现了 ANYTHING 错误,我会立即收到通知。然而,尽管如此,我还没有收到任何关于它失败的电子邮件,即使我亲眼看到它失败了。我在此功能之前和之后添加了日志命令,以查看它是停止一起工作还是继续工作。在每种情况下,无论函数调用是否成功,日志命令都会通过。
对我来说,这只能意味着函数 google.script.run 出于某种原因无法正常工作,并且无法运行相关函数,但没有返回错误消息或停止脚本。
我完全不知所措,因为我没有错误消息,没有可重复的步骤,并且之前没有这个问题的历史,而随着时间的推移突然开始变得越来越糟。我检查了谷歌的问题跟踪器没有结果。如果其他人正在使用此功能并且遇到问题,我希望您在这里分享您的经验。如果您有解决方案,请尽快让我知道。如果我不能解决这个问题,我将不得不完全使用一个新平台。
编辑 10/2: 在进一步研究这个问题后,我发现了这个项目所有执行的列表。我可以看到执行了哪些功能,执行时间和执行时间。我可以看到,当打开 HTML 服务的函数运行时,应该运行的下一个函数并不总是出现在列表中。如果没有,我可以看到用户重复他们的步骤,直到它运行。这支持了我的理论,即该函数在调用我的 script.run 后应该没有运行
【问题讨论】:
-
有多少并发用户?最多允许同时执行 30 次。
-
如果没有看到您的代码,很难确定问题所在。但是 google.script.run 不太可能“无法正常工作”,因为它被许多用户广泛使用。我的经验是在客户端尝试捕获 javascript 可能并不总是捕获错误。另一件事是异步客户端和服务器功能是如何运行的。您使用的是 withSuccessHandler 和 withFailureHandler 不是吗?
-
@Tehhowch 并发用户的数量永远不会超过 2 或 3。这个限制帐户是跨所有脚本还是仅在每个函数上?
-
MailApp.sendEmail()在客户端代码中不起作用。您的onFailure函数中有MailApp.sendEmail()。您需要从onFailure向服务器发出google.script.run.functionName()调用,然后从服务器发送电子邮件。 -
@Swordstoo,我注意到您的客户端脚本的另一件事是它在 processForm 之后立即调用 google.script.host.close。由于客户端服务器脚本是异步运行的,因此您的表单将在 processForm 返回之前关闭。所以你的成功处理程序实际上什么都不做。
标签: html google-apps-script web-applications