Javascript 减少google AppScript中UrlFetch的执行时间

Javascript 减少google AppScript中UrlFetch的执行时间,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,我有一个包含URL列表的电子表格。 我试图搜索URL是否包含特定类,根据响应,我将在它旁边的单元格中设置0或1。 我已经做了一个脚本,它确实做到了这一点,但我遇到了执行超时错误,所以我只想知道是否有任何方法可以减少它的执行时间 这是密码 函数ulrFetch(){ var ss=SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1'); var class=ss.getRange(1,5).getValue(); var lr

我有一个包含URL列表的电子表格。 我试图搜索URL是否包含特定类,根据响应,我将在它旁边的单元格中设置0或1。 我已经做了一个脚本,它确实做到了这一点,但我遇到了执行超时错误,所以我只想知道是否有任何方法可以减少它的执行时间

这是密码

函数ulrFetch(){
var ss=SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
var class=ss.getRange(1,5).getValue();
var lr=ss.getLastRow();
var urlist=ss.getRange(3,8,lr-1).getValues();
var length=urlist.length
对于(变量i=0;i-1){
ss.getRange(i+3,5).setValue('1');
}
否则{
ss.getRange(i+3,5).setValue('0');
}
}

}
这次修改怎么样?我认为fetchAll()可以使用720个请求。因此,我建议使用fetchAll()。此修改脚本的流程如下所示

  • 使用
    urlist
    创建请求
  • 使用fetchAll()从URL检索值
  • 创建用于放入电子表格的值
  • 将创建的值放入“E3:E”
  • 修改脚本: 请修改如下

    发件人: 致: 通过此修改,可以检索从第3行到最后一行的值

    发件人: 注:
    • 如果由于fetchAll()的限制而发生错误,请告诉我。我想修改脚本
    参考:

    如果我误解了你的问题,很抱歉。

    我可以问你
    var length=urlist.length
    length
    的值吗?我认为在你的情况下,你可以使用。fetchAll()可以通过异步处理进行处理。但我也认为,当
    长度
    很大时,它可能无法使用它。@Tanaike感谢您的回复,URL列表的长度为720。谢谢您的回复。我发布了一个答案,因为我认为fetchAll()可以使用720个请求。您能确认一下吗?您好,谢谢您提供的答案似乎很有说服力,但我在这一行“var res=UrlFetchApp.fetchAll(requests);”@Ace Cool遇到了这个错误“无效参数:http://”。在这个修改后的脚本中,
    urlList
    是包含URL的二维数组。无法使用URL时会发生此错误。那么,您可以提供您想要使用的示例URL吗?我确认,在我的环境中,当可以使用的URL用于请求时,它是有效的。完美!非常感谢您的时间和支持,我接受了您的回答。:)@我很高兴你的问题解决了。也谢谢你。
    var urlList = ss.getRange(3, 8, lr-1).getValues();
    
    var urlList = ss.getRange(3, 8, lr - 1 - 1).getValues();
    
    for (var i = 0;i<length;i++){
      var url = urlList[i];
      var response = UrlFetchApp.fetch(url.toString());
      var result = response.getContentText();
      var index = result.indexOf(class);
      if (index > -1){
    
        ss.getRange(i+3, 5).setValue('1');
      }
      else {
        ss.getRange(i+3, 5).setValue('0');
      }
    }
    
    var requests = urlList.map(function(e) {return {url: e[0]}});
    var res = UrlFetchApp.fetchAll(requests);
    var values = res.map(function(e) {return e.getContentText().indexOf(class) > -1 ? ["1"] : ["0"]});
    ss.getRange(3, 5, values.length, 1).setValues(values);