Tengo for loop aquí para llamar llamadas API desde el sitio web de ticketmaster e importar en hojas de google. El problema es que no puedo hacer muchas llamadas a la API a la vez, tengo que esperar alrededor de 1 segundo.
Entonces, cuando hago que el ciclo espere 1 segundo, por ejemplo, si la matriz tiene 40 elementos, espero 40 segundos. No hay problema con eso debido a la gran cantidad de datos, pero cuando la función espera da un error de límite de tiempo de ejecución, necesito configurar el tiempo de ejecución ilimitado.
for (var Veunue_id1 = 0; Veunue_id1 < Venue_Id_List.length; Veunue_id1++) { var Venue_API_Url = "https://app.ticketmaster.com/discovery/v2/venues?apikey=" + API_key + "&keyword=" + Venue_Id_List[Veunue_id1] + "&locale=*"; // ImportJSON(url, "/","noInherit,noTruncate,rawHeaders"); // console.log(ImportJSON(url, "/", "noInherit,noTruncate,rawHeaders")); // console.log("Veuneid" + Veunue_id + Venue_Id_List.length); results = results.concat(ImportJSON(Venue_API_Url, "/_embedded/venues/id", "noInherit,noTruncate,rawHeaders")); console.log(results); // wait1 second Utilities.sleep(1000); }Este es un problema común, especialmente cuando se trabaja con una API de datos pesados. El enfoque general es:
Código de ejemplo basado en su situación (no probado)
function SimpleTimer(timeout){ var start = Date.now(); this.getElapsed = () => Date.now() - start; this.isTimeout = () => this.getElapsed() > timeout; } function resetProgress(){ PropertiesService.getScriptProperties().setProperty('last', '-1') } function test_SimpleTimer() { var timer = new SimpleTimer(4*60*1000) // 4 min; var start = PropertiesService.getScriptProperties().getProperty('last') || '-1'; for (var Veunue_id1 = parseInt(start) + 1; Veunue_id1 < Venue_Id_List.length && ! timer.isTimeout(); Veunue_id1++) { var Venue_API_Url = "https://app.ticketmaster.com/discovery/v2/venues?apikey=" + API_key + "&keyword=" + Venue_Id_List[Veunue_id1] + "&locale=*"; results = results.concat(ImportJSON(Venue_API_Url, "/_embedded/venues/id", "noInherit,noTruncate,rawHeaders")); Utilities.sleep(1000); PropertiesService.getScriptProperties().setProperty('last', '' + Veunue_id1) } // SAVE YOUR DATA HERE, NEXT CALL WILL PROCEED FROM LAST STEP }