簡體   English   中英

Google腳本,按順序運行函數而不會超過執行時間

[英]Google Script, Run functions in sequence without exceeding execution time

我有很多從網站獲取JSON API數據的函數,但是如果我以這種方式依次運行它們,則會收到超出執行時間的錯誤:

function fetchdata () {
    data1();
    data2();
    data3();
    data4();
    ...
}

我可以安排一個觸發器在另一個5分鍾運行一次(因為一個觸發器在3分鍾內運行),但是我想知道是否還有其他方法。 謝謝

編輯:每個“數據”功能是這樣的:

function data1() {

  var addresses = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Import");
  var baseUrl = 'https://myapiurl';

  var address = addresses.getRange(2, 1, 500).getValues();

  for(var i=0;i<address.length;i++){
    var addrID = address[i][0];
    var url = baseUrl.concat(addrID);
    var responseAPI = UrlFetchApp.fetch(url);
    var json = JSON.parse(responseAPI.getContentText());

    var data = [[json.result]];
    var dataRange = addresses.getRange(i+2, 2).setValue(data);

  }
}

data2用於502-1001行,data3用於1002-1501行,依此類推...

我只是刪除了concat,因為根據MDN而言,它存在性能問題, 但是顯然,真正的問題是獲取 ,除非您可以獲取外部api來轉儲更大的批處理,否則我們將無能為力。

您可以從Web應用程序啟動每個功能,然后通過withSuccessHandler返回它,然后啟動系列中的下一個腳本,並以菊花鏈方式遍歷所有子功能,直到完成。 每個子功能將花費3分鍾左右的時間,但您只需要擔心將每個子功能保持在6分鍾以內即可。

function data1() 
{
  var addresses = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Import");
  var baseUrl = 'https://myapiurl';
  var address = addresses.getRange(2, 1, 500).getValues();
  for(var i=0;i<address.length;i++){
    var responseAPI = UrlFetchApp.fetch(baseUrl + address[i][0]);
    var json = JSON.parse(responseAPI.getContentText());
    var data = [[json.result]];
    var dataRange = addresses.getRange(i+2, 2).setValue(data);
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM