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”)的主要内容,如果未能解决你的问题,请参考以下文章