我想同时运行两个函数,但不能让它们单独运行,因为一个函数包含一个无限循环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...
}
发布于 2019-09-23 17:53:21
若要“同时”运行两个或多个函数,应分别调用每个函数。一种方法是从客户端代码进行使用承诺。
请记住,您的服务器端无限循环最终将导致您的脚本超过最大执行时间(6分钟/ 30分钟,取决于有效用户使用的帐户类型)。
相关
发布于 2019-09-23 19:48:03
在Apps脚本中运行一个无限循环是徒劳的,因为有对大多数脚本强制执行6分钟的最长执行时间。当您达到这个限制时,脚本的执行将被终止。
从您的示例脚本判断,您要做的是设置文档名称的计划作业。为此目的,使用时间驱动的触发器. 为您提供更好的服务。
然后,您可以这样构造您的脚本:
function onOpen() {
// code...
}
function updateDocumentName() {
DocumentApp.getActiveDocument().setName("dont change this name")
}
然后,可以将设置时间驱动触发器与updateDocumentName()
函数关联起来。
需要注意的一个主要区别是:与其每100 is执行一次逻辑,不如用时间驱动触发器设置的最高频率是每1分钟一次。
发布于 2020-01-11 19:43:00
是!简单地将一个函数放在另一个函数中。
function EmailSummary() {
// Modified from http://stackoverflow.com/a/22200230/1027723 .. SOURCE: https://mashe.hawksey.info/2015/07/tips-on-emailing-inline-google-charts-from-sheets-using-apps-script/
function emailCharts(sheet_name){ // eg "SF_EMAIL"
sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheet_name)
var charts = sheet.getCharts();
if(charts.length==0){
MailApp.sendEmail({
...
只需确保缩进正确。
https://stackoverflow.com/questions/58064351
复制相似问题