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; }
使用说明
- 查看活跃请求数:在表格的任意单元格中调用
=getActiveRequestCount(),就能实时看到当前正在运行的UrlFetch请求数量 - 判断请求全部完成:当
getActiveRequestCount()返回0时,说明所有触发的请求都已执行完毕 - 额外提示:
- 自定义函数有执行限制(比如单次运行时长、请求频次),如果请求量很大,建议改用菜单触发的脚本分批处理
- 若需要在所有请求完成后自动执行后续操作,可以设置时间驱动触发器,定期检查计数器,当计数为0时触发对应逻辑
内容的提问来源于stack exchange,提问作者Farhan Haque
相关产品推荐
相关产品推荐

