【问题标题】:Is there a way to stop an automatically running script in the middle of execution?有没有办法在执行过程中停止自动运行的脚本?
【发布时间】:2019-02-11 02:53:29
【问题描述】:

首先我是木匠而不是开发人员。

我正在使用谷歌表单来自动估算工作。我有一个脚本,可以将答案格式化为 pdf,以便将它们发送给我的主要客户以供批准。 masterFunction() 由表单提交触发。我编写的脚本可能不是正确的方法,但如下所示;

function masterFunction() {
    aFunction();
    bFunction();
    cFunction();
    ...
};

function a(){
   ...
};

function b(){
   ... 
};       
...

如果脚本在任何子函数中遇到错误,我想将之前的工作保存在另一个文件中并进行清理,以便下一个表单响应可以运行。之后我可以回去纠正问题并运行脚本的其余部分。

我已经在代码中设置了一些位置来捕获这些错误,例如空白字段、空值或我在表单上没有正确输入的内容(但不是脚本错误,我不关心这些),这会向我发送有关这些问题的电子邮件警报,但其他人可能会将这些 pdf 文件发送给客户而看不到问题。

有没有办法停止masterFunction()。我发现的大多数东西都会停止子函数,例如 break 或 try,但这只会将其发送回主函数,主函数将继续并将其发送到下一个函数并运行到最后。

【问题讨论】:

    标签: google-apps-script


    【解决方案1】:

    一种选择是使用“return”语句,它允许您从函数中返回一个值。当你调用 return 时,函数会立即结束,并且可以选择将一个值传回给父级,你可以检查它。

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/return

    修改您的子函数以使用“return”语句并在成功时返回“true”值,在失败时返回“false”值,然后检查每个函数的结果:

    在功能中:

    return false;
    

    在主人:

    var a_result = aFunction();
    if(!a_result){
        /*... optionally do "failed" tasks here ..*/
        return  //exit master function
    }
    

    另一个选择是“抛出”一个异常,然后您可以在您的主函数中“捕获”它。如果您不关心您的哪个子函数失败,那么引发异常可能会更好。

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/throw

    在孩子中:

    throw "missing name!"
    

    在主人:

       function masterFunction(){
        try{
           aFunction();
           bFunction();
           ...
        }catch(e){
            logger.log('Caught error '+e);
        }
       }
    

    【讨论】:

    • 谢谢。在昨晚发布之后,我想到了一个类似的想法,但还没有尝试过。我打算将函数放在一个数组中,并在返回值上使用 if 语句循环遍历它们,然后发送到一个函数来完成其余的工作。非常感谢你。我将以您发布的内容为起点。
    猜你喜欢
    • 2019-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-14
    • 2023-04-09
    • 2016-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多