![](/img/trans.png)
[英]List all files in google drive without exceeding maximum execution time
[英]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.