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

为何第二个循环仅执行一次?多ID API查询脚本故障排查

问题根源:全局变量i导致循环冲突

你代码里的两个循环都使用了未声明的变量i,这会让i成为全局变量,导致两个循环的计数器互相干扰:

  • 当requestById的循环第一次调用submitById时,内部的循环会把全局的i修改为res.tasks[0].result[0].items.length的值
  • 回到requestById的循环时,这个全局的i已经大于等于ids.length,循环直接终止,后续的ID自然不会执行

修复方案:给每个循环的计数器声明局部变量

在两个循环里用let(推荐)或var声明i,将变量限定在当前函数的作用域内,避免全局污染:

// Makes the request by ID    
function requestById() {
  var ids = sheet.getRange(2,1,sheet.getLastRow() - 1).getValues()
  // 声明局部变量i,避免全局污染
  for (let i = 0; i < ids.length; i++) {
    submitById(ids[i][0])
  }
}

// Fetches the results from the API
function submitById(x) {
  var url = "{api URL}" + x
  
  const options = {
    contentType: "application/json",
    headers: { Authorization: "Basic " + b64apiKey, 'Content-Type': 'application/json'},
  }

  var res = JSON.parse(UrlFetchApp.fetch(url, options))

  Logger.log(x)
  
  // 同样声明局部变量i
  for (let i = 0; i < res.tasks[0].result[0].items.length; i++) {
    Logger.log(res.tasks[0].result[0].items[i])
  }
}

这样修改后,每个循环的计数器都是独立的局部变量,submitById内部的循环不会影响requestById的循环进度,所有ID都会完整执行查询和遍历逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 22:52:24