有没有办法同时(同时/异步)运行两个函数,一个函数作为无限循环?

Mr *_*Guy -1 asynchronous function simultaneous infinite-loop google-apps-script

我有两个要同时运行的函数,但我不能让它们单独运行,因为一个函数包含一个无限循环while(true)。JavaScript 的问题是,如果你在哪里运行两个函数,它会在运行下一个之前完成该函数的运行;所以如果我用while(true)循环运行一个函数,它永远不会移动到下一个函数。
如果你还不明白,这是我的代码:

function onOpen(){           // Google Apps Script trigger
    infLoop()                //how to run both of these functions at the same time?
    runScript()
}

function infLoop(){          //inf loop.

    while(True){
        Utilities.sleep(100)
        DocumentApp.getActiveDocument()
        .setname("dont change this name")
    }
}

function runScript(){
    //code...
}
Run Code Online (Sandbox Code Playgroud)

The*_*ter 10

Google 应用程序脚本同步执行。大多数情况下,不可能同时/并行处理。根据您的脚本,您似乎希望两个函数在 onOpen 上同时运行。可能的解决方法(有些未测试):

解决方法#1:使用不同的项目

  • 创建一个新项目:在编辑器中(仅限 Legacy/Old 编辑器)>File>New>Project
  • 第一个项目onOpen()将运行infLoop()
  • 第二个项目onOpen()将运行runScript()
  • 这两个功能将在打开时同时运行。

解决方法#2:简单且可安装的触发器1

  • 创建一个可安装的触发器 runScript()
  • 简单的触发器onOpen()将运行infLoop()
  • 这两个功能将在打开时同时运行。
  • 您可以使用两个可安装的触发器,而不是简单且可安装的触发器。

解决方法#3:Web 应用程序:从客户端调用

  • 如果打开侧边栏或从 Web 应用程序打开工作表,则可以通过google.script.run(异步运行)重复调用服务器功能

  • 这里可以运行一个函数 6 分钟(当前运行时间)。但是通过重复调用服务器函数,可以长时间运行该函数(最多90分钟/天=当前触发运行时间配额/天)

解决方法#4:Web 应用程序:UrlFetchApp#fetchAll 2

  • UrlFetchApp#fetchAll 异步运行
  • 发布 Web 应用程序后,发布的 url 可以与查询参数一起使用。如果将一个函数名作为参数发送并doGet()执行该函数,.fetchAll则可以用于多个函数的异步。

解决方法#5:onEdit/onChange

  • 如果进行了编辑,则两个函数(onEdit/onChange)同时运行。

解决方法#6:Sheets API/onChange

  • 如果加载项/脚本通过 sheet api 进行更改,则onChange 可能会被触发。如果触发,通过 sheet api 所做的每个更改都会导致 onChange 异步运行。