Namokonov

Untitled

Nov 4th, 2020
220
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //пример запуска с пятью попытками
  2. function test(){
  3. retry(5, get, '1ZkjhrxFQ26x_aRWth2D', 'Лист5');
  4. }
  5.  
  6. function get(id, range){  
  7.  
  8.   let get_params= '/'+ id +'/values/' + encodeURIComponent(range) + '?'
  9.   + '&valueRenderOption=FORMATTED_VALUE'
  10.   + '&dateTimeRenderOption=SERIAL_NUMBER'
  11.   //  + '&majorDimension=ROWS'
  12.  
  13.   let api_url = sheets_api_url + get_params;  
  14.   let params = {
  15.     method: "GET",
  16.     muteHttpExceptions: true,
  17.     headers: {
  18.       Authorization: "Bearer " + ScriptApp.getOAuthToken(),
  19.       'Accept': "application/json;"
  20.     }
  21.   };  
  22.  
  23.   return JSON.parse(UrlFetchApp.fetch(api_url, params)).values;
  24. }
  25.  
  26. function append(id, range, values){
  27.   let get_params= '/'+ id +'/values/' + encodeURIComponent(range) +':append'
  28.   + '?responseDateTimeRenderOption=SERIAL_NUMBER'
  29.   + '&responseValueRenderOption=FORMATTED_VALUE'
  30.   + '&valueInputOption=USER_ENTERED';
  31.    
  32.   let api_url = sheets_api_url + get_params ;
  33.  
  34.     let data = {
  35.     'range': range,
  36.     'majorDimension': 'ROWS',
  37.     'values': values
  38.   };
  39.  
  40.   let params = {
  41.     method: "POST",
  42.     muteHttpExceptions: true,
  43.     contentType: 'application/json',
  44.     payload: JSON.stringify(data),
  45.     headers: {
  46.       Authorization: "Bearer " + ScriptApp.getOAuthToken(),
  47.       'Accept': "application/json;"
  48.     }        
  49.   };
  50.  
  51.   return JSON.parse(UrlFetchApp.fetch(api_url, params));
  52. }
  53.  
  54. function retry(n, func, ...args) {
  55.   for(let i = 0; i < Math.min(n, 9); i++) {
  56.     try {
  57.       return func(...args)
  58.     } catch(e) {
  59.       Logger.log("Retry " + (i+1) + " failed, waiting")
  60.       Logger.log(e)
  61.       Utilities.sleep(i * 1000)
  62.     }
  63.   }
  64.   throw "Number of tries exceeded, aborting"
  65. }
Add Comment
Please, Sign In to add comment