You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Google Script在同一按钮触发的两个函数之间等待3秒

问题根因

  • google.script.run 是异步调用接口,你原有写法中步骤2的服务端写入请求还没执行完成,就触发了步骤4的查询请求,自然拿不到有效数据
  • 你之前尝试的SpreadsheetApp.flush()、Utilities.sleep(3000)、LockService都是Google Apps Script服务端API,不能直接在前端JS代码中运行,因此完全不生效

解决方案1:前端异步等待(改动最小)

直接改造前端调用逻辑,等步骤2的服务端写入操作执行成功后,再延迟3秒触发步骤4的查询:

// 改造后的提交函数
function handleFormSubmit(formObject) {
  // 先执行步骤2:写入追踪号到Sheet
  google.script.run
  .withSuccessHandler(() => {
    // 写入成功后等待3秒,让Program工作表完成数据拉取
    setTimeout(() => {
      // 执行步骤4:查询追踪结果
      google.script.run.withSuccessHandler(createTable).processReturnForm(formObject);
      document.getElementById("myForm").reset();
    }, 3000);
  })
  .processForm(formObject);
}

原有独立的sendTracking和trackingInfo函数可以保留也可以直接整合到上面的逻辑里。

解决方案2:服务端合并逻辑(更稳定)

把写入、等待、查询的逻辑全部放到服务端处理,避免前端异步时序问题,可靠性更高:

新增服务端合并函数

function processFullTracking(formObject) {
  var url = "你的Google Sheet地址";
  var ss = SpreadsheetApp.openByUrl(url);
  var ws = ss.getSheetByName("Tracker");
  // 写入追踪号
  ws.getRange('D3').setValue(formObject.trackingNumber);
  // 强制刷新确保写入完成
  SpreadsheetApp.flush();
  // 等待3秒让Program工作表完成数据拉取
  Utilities.sleep(3000);
  // 直接返回查询结果
  return search(formObject.trackingNumber);
}

对应前端调用代码

function handleFormSubmit(formObject) {
  google.script.run
  .withSuccessHandler(createTable)
  .processFullTracking(formObject);
  document.getElementById("myForm").reset();
}

内容的提问来源于stack exchange,提问作者Gianne

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 17:09:05