Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 谷歌应用程序脚本:多个用户点击doGet和doPost脚本,变量会混淆吗?_Google Apps Script - Fatal编程技术网

Google apps script 谷歌应用程序脚本:多个用户点击doGet和doPost脚本,变量会混淆吗?

Google apps script 谷歌应用程序脚本:多个用户点击doGet和doPost脚本,变量会混淆吗?,google-apps-script,Google Apps Script,我正在使用GAS文件作为我正在构建的应用程序的服务器端。我定义了doPost(e)和doGet(e)函数,例如: function doPost(e) { var postData = e.postData.contents; var jsonRaw = JSON.parse(postData); var name = jsonRaw.name; // make a long URLFetch call... textOutput

我正在使用GAS文件作为我正在构建的应用程序的服务器端。我定义了doPost(e)和doGet(e)函数,例如:

function doPost(e) {
     var postData = e.postData.contents;
     var jsonRaw = JSON.parse(postData); 
     var name = jsonRaw.name;

     // make a long URLFetch call...
     
     textOutput = ContentService.createTextOutput('execution done for ' + name); 
     return textOutput         
   }
我没有在特定函数的作用域之外声明任何“全局”变量。我的问题是,如果我为用户a运行了一个长时间运行的doPost,并且突然用户B也在用户a的请求完成之前发出了一个doPost请求,那么name变量是否可能被重新分配,并且用户a在输出中看到了用户B的名称


根据这里的答案:我相信我应该没事,但我想确认一下。谢谢

也许您应该使用局部变量 局部变量不是共享资源。调用函数时,在函数中定义的变量将属于该函数的作用域。这意味着,如果您有一个在变量中存储参数的函数,则该变量仅对该特定函数的执行有效

全局变量 全局变量当然不同,因为项目中的所有函数都知道它们的值。这些是共享资源,因此如果需要修改它们的值,您可能希望锁定对它们的访问

概念证明 您可以通过创建一个简单的Web应用程序来验证此行为,该应用程序获取一个查询参数,将其存储在一个变量中,并在10秒后返回该参数

function doGet(e) {
  var param = e.queryString;
  Utilities.sleep(10000);
  return ContentService.createTextOutput(param);
}
如果在10秒内使用不同的参数调用此方法,您应该注意到第一个
GET
请求返回的值是第二个请求的查询参数。但事实并非如此

工具书类


非常感谢-但我的doPost和doGet需要这样做吗?块作用域变量是否被视为可以同时修改的共享资源?这只是防止多个用户同时运行脚本的一种方法。还要注意的是,谷歌应用程序脚本限制为不超过30个同时使用的用户。感谢您提供的关于30个同时使用的用户的信息,如果我开始这样做,我肯定会选择合适的服务器端提供商。我想我还不清楚我的用例是否需要锁服务?如果代码的另一个实例在前一个实例完成之前开始运行,那么应用程序脚本函数中的变量将被重新分配一个新值。您可以尝试LockService,或者,如果您需要其他选择,Google云功能可以在其独立的安全执行上下文中运行,并自动扩展。您的应用程序脚本代码正在发出HTTPS请求,这可以通过Google云函数HTTP函数完成。谢谢,我应该自己测试一下!但我也希望能从一个对此有更直接经验的人那里听到。我重复了你的测试,得到了相同(不同)的结果。