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

Google Apps Script:如何获取活跃UrlFetchApp请求数(类jQuery的$.active)

跟踪Google Apps Script自定义函数中的活跃UrlFetch请求

在Google Apps Script的自定义函数场景下,要跟踪活跃请求数量或者判断所有请求是否完成,我们可以借助Cache Service来实现全局的计数器——毕竟自定义函数的多次调用共享同一个脚本的缓存空间。下面是具体的实现方案:

实现思路

  • 用CacheService.getScriptCache()获取全局脚本缓存,专门存储当前活跃的请求计数
  • 请求开始前递增计数器,请求完成(无论成功/失败)后递减计数器,用try...finally块保证计数不会因为异常而错乱
  • 设置缓存过期时间,避免因脚本超时等极端情况导致计数残留

完整代码示例

function myFunction(param) {
  const cache = CacheService.getScriptCache();
  const counterKey = "active_urlfetch_requests";
  
  // 初始化计数器(缓存中无数据则默认设为0)
  let currentCount = parseInt(cache.get(counterKey)) || 0;
  
  try {
    // 递增活跃请求数并更新缓存
    currentCount++;
    cache.put(counterKey, currentCount.toString(), 300); // 5分钟过期,防止异常导致计数残留
    
    // 执行你的UrlFetch请求
    const response = UrlFetchApp.fetch("你的API地址", {
      // 这里填写请求配置,比如method、payload、headers等
    });
    
    // 处理响应逻辑
    const data = JSON.parse(response.getContentText());
    // 这里写你的业务处理代码
    
    return data; // 返回结果到调用的单元格
  } catch (error) {
    // 捕获并处理请求异常
    console.error("请求失败:", error);
    return "请求错误";
  } finally {
    // 无论请求成功或失败,都递减计数器
    currentCount--;
    // 计数归零时移除缓存键,否则更新缓存值
    if (currentCount <= 0) {
      cache.remove(counterKey);
    } else {
      cache.put(counterKey, currentCount.toString(), 300);
    }
  }
}

// 辅助函数:获取当前活跃请求数
function getActiveRequestCount() {
  const cache = CacheService.getScriptCache();
  const count = parseInt(cache.get("active_urlfetch_requests")) || 0;
  console.log("当前活跃请求数:", count);
  return count;
}

使用说明

  1. 查看活跃请求数:在表格的任意单元格中调用=getActiveRequestCount(),就能实时看到当前正在运行的UrlFetch请求数量
  2. 判断请求全部完成:当getActiveRequestCount()返回0时,说明所有触发的请求都已执行完毕
  3. 额外提示:
    • 自定义函数有执行限制(比如单次运行时长、请求频次),如果请求量很大,建议改用菜单触发的脚本分批处理
    • 若需要在所有请求完成后自动执行后续操作,可以设置时间驱动触发器,定期检查计数器,当计数为0时触发对应逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:51:10