javascript GASRetry - Google Apps脚本的指数退避JavaScript实现(库项目密钥:“MGJu3PS2ZYnANtJ9kyn2vnlLDhaBgl_dE”)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript GASRetry - Google Apps脚本的指数退避JavaScript实现(库项目密钥:“MGJu3PS2ZYnANtJ9kyn2vnlLDhaBgl_dE”)相关的知识,希望对你有一定的参考价值。

/**
* Invokes a function, performing up to 5 retries with exponential backoff.
* Retries with delays of approximately 1, 2, 4, 8 then 16 seconds for a total of 
* about 32 seconds before it gives up and rethrows the last error. 
* See: https://developers.google.com/google-apps/documents-list/#implementing_exponential_backoff 
* <br>Author: peter.herrmann@gmail.com (Peter Herrmann)
<h3>Examples:</h3>
<pre>//Calls an anonymous function that concatenates a greeting with the current Apps user's email
var example1 = GASRetry.call(function(){return "Hello, " + Session.getActiveUser().getEmail();});
</pre><pre>//Calls an existing function
var example2 = GASRetry.call(myFunction);
</pre><pre>//Calls an anonymous function that calls an existing function with an argument
var example3 = GASRetry.call(function(){myFunction("something")});
</pre><pre>//Calls an anonymous function that invokes DocsList.setTrashed on myFile and logs retries with the Logger.log function.
var example4 = GASRetry.call(function(){myFile.setTrashed(true)}, Logger.log);
</pre>
*
* @param {Function} func The anonymous or named function to call.
* @param {Function} optLoggerFunction Optionally, you can pass a function that will be used to log 
to in the case of a retry. For example, Logger.log (no parentheses) will work.
* @return {*} The value returned by the called function.
*/
function call(func, optLoggerFunction) {
  for (var n=0; n<6; n++) {
    try {
      return func();
    } catch(e) {
      if (optLoggerFunction) {optLoggerFunction("GASRetry " + n + ": " + e)}
      if (n == 5) {
        throw e;
      } 
      Utilities.sleep((Math.pow(2,n)*1000) + (Math.round(Math.random() * 1000)));
    }    
  }
}

以上是关于javascript GASRetry - Google Apps脚本的指数退避JavaScript实现(库项目密钥:“MGJu3PS2ZYnANtJ9kyn2vnlLDhaBgl_dE”)的主要内容,如果未能解决你的问题,请参考以下文章

如何克服 JavaScript 代码中缺少 Perl 的 \G 的问题?

javascript工具函数

作为 javascript 函数的结果,在 g:remoteLink 中传递参数

检查字符串是不是包含“µg” JavaScript 特殊字符

grails 2.0 <g:javascript> 不起作用

Javascript ROY G BIV 线谱?