如何让 Google 脚本在两个函数之间等待 3 秒? 2 个功能在 1 个按钮中
How to make Google Script wait 3 seconds between two functions? The 2 functions are in 1 button
关于:我做了一个Google Script Web App for tracking packages for our freight company. The database is on Google Sheets,有两个sheets,分别命名为“Tracker”和“Program”来自动跟踪包裹。
进程:
- 在网络应用程序上,我输入了跟踪号
- 点击后,它会发送到 Tracker sheet
- 程序 sheet 从 Tracker sheet 获取跟踪号,并花费 2-3 秒获取数据
- 来自程序sheet的数据(只有1行数据——只有相关数据)被发送回网络应用程序供客户端查看
我的问题: 我需要通过单击 1 个按钮来执行步骤 2 和 4。现在,如果我填两次表格就可以了(这对客户来说很麻烦)。
问题: 有没有办法让我先执行第 2 步,然后 Google 脚本在执行第 4 步之前等待 3 秒?只需单击 1 次按钮
// STEP 2 where tracking number gets sent to Sheets
function sendTracking(formObject) {
google.script.run.processForm(formObject);
document.getElementById("myForm");
}
// STEP 4 where tracking status is returned from Sheets to Web App
function trackingInfo(formObject) {
google.script.run.withSuccessHandler(createTable).processReturnForm(formObject);
document.getElementById("myForm").reset();
}
我尝试了什么:
所有这些都返回空白——我已将它们全部放在第 2 步和第 4 步的两个函数之间。我不确定是我输入错误还是它们真的不适用于我的函数。
- SpreadsheetApp.flush();
- Utilities.sleep(3000)
- LockService.getScriptLock(); lock.waitLock();
// COMBINED: Process STEP 2 & 4
function handleFormSubmit(formObject) {
sendTracking(formObject); // THIS IS STEP 2
// codes above inserted here
trackingInfo(formObject); // THIS IS STEP 4
}
其他相关代码:
第二步背后的代码:
function processForm(formObject) {
var url = "URL";
var ss = SpreadsheetApp.openByUrl(url);
var ws = ss.getSheetByName("Tracker");
ws.getRange('D3').setValue(formObject.trackingNumber);
}
步骤4背后的代码:
function processReturnForm(formObject){
var result = "";
if(formObject.trackingNumber){//Execute if form passes search text
result = search(formObject.trackingNumber);
}
return result;
}
将其放在 processForm
的末尾或 SuccessHandler
的开头。
正如我在您之前的问题中所回答的那样。您的代码中无法确保执行顺序。请先解决这个问题。
Utilities.sleep(3000);
参考:
关于:我做了一个Google Script Web App for tracking packages for our freight company. The database is on Google Sheets,有两个sheets,分别命名为“Tracker”和“Program”来自动跟踪包裹。
进程:
- 在网络应用程序上,我输入了跟踪号
- 点击后,它会发送到 Tracker sheet
- 程序 sheet 从 Tracker sheet 获取跟踪号,并花费 2-3 秒获取数据
- 来自程序sheet的数据(只有1行数据——只有相关数据)被发送回网络应用程序供客户端查看
我的问题: 我需要通过单击 1 个按钮来执行步骤 2 和 4。现在,如果我填两次表格就可以了(这对客户来说很麻烦)。
问题: 有没有办法让我先执行第 2 步,然后 Google 脚本在执行第 4 步之前等待 3 秒?只需单击 1 次按钮
// STEP 2 where tracking number gets sent to Sheets
function sendTracking(formObject) {
google.script.run.processForm(formObject);
document.getElementById("myForm");
}
// STEP 4 where tracking status is returned from Sheets to Web App
function trackingInfo(formObject) {
google.script.run.withSuccessHandler(createTable).processReturnForm(formObject);
document.getElementById("myForm").reset();
}
我尝试了什么: 所有这些都返回空白——我已将它们全部放在第 2 步和第 4 步的两个函数之间。我不确定是我输入错误还是它们真的不适用于我的函数。
- SpreadsheetApp.flush();
- Utilities.sleep(3000)
- LockService.getScriptLock(); lock.waitLock();
// COMBINED: Process STEP 2 & 4
function handleFormSubmit(formObject) {
sendTracking(formObject); // THIS IS STEP 2
// codes above inserted here
trackingInfo(formObject); // THIS IS STEP 4
}
其他相关代码:
第二步背后的代码:
function processForm(formObject) {
var url = "URL";
var ss = SpreadsheetApp.openByUrl(url);
var ws = ss.getSheetByName("Tracker");
ws.getRange('D3').setValue(formObject.trackingNumber);
}
步骤4背后的代码:
function processReturnForm(formObject){
var result = "";
if(formObject.trackingNumber){//Execute if form passes search text
result = search(formObject.trackingNumber);
}
return result;
}
将其放在 processForm
的末尾或 SuccessHandler
的开头。
正如我在您之前的问题中所回答的那样。您的代码中无法确保执行顺序。请先解决这个问题。
Utilities.sleep(3000);
参考: