在 App 脚本中为幻灯片排队用户 API 批量更新
Queuing users for Slides API Batch Update in App Script
我在 App Script 中的用户从电子表格中读取他们的队列号:
var array = sessionsSheets.getRange(row, 2, 1, 3).getValues()[0];
var questionNumber = array[2]; //This is the variable of interest, it is an integer signifying the queue
sessionsSheets.getRange(`D${row}`).setFormula(questionNumber+1); //This is the updated queue
然后他们会更新此队列编号,如上所示。这种方法在大多数情况下都可以正常工作,但是如果您同时使用两个设备和 运行 脚本,它们都会收到相同的队列,并且脚本将停止其中一个,因为稍后您需要一个唯一的队列号使用幻灯片 API:
Slides.Presentations.batchUpdate({'requests': requests}, presentationId);
如果 promises 有效,我会简单地将 Slides API 行放在一个 try 块中,如果出现口是心非的错误,我会递归调用相同的函数,直到重叠不存在为止'不会发生。但是,App 脚本不支持 promises,所以我应该尝试什么?
我找到了针对我的特殊情况的修复方法:
我在 App Script 的属性服务中使用了 ScriptProperties。当用户打开应用程序时,他会使用会话令牌查找密钥的 属性。如果它说忙,他等待并递归地尝试相同的功能,如果它说空闲,他将其更改为忙碌,执行他的 API,然后最后再次将其更改为空闲。
代码片段:
function queueing(comment,name,token,sessionsSheets,row) {
var properties = PropertiesService.getScriptProperties();
var state = properties.getProperty(token);
if (state==null){
properties.setProperty(token , `busy@0`);
posting(comment,name,token,sessionsSheets,row,0);
} else if (state.includes("busy")){
Logger.log('Gotta wait my turn');
Utilities.sleep(2000);
queueing(comment,name,token,sessionsSheets,row);
} else if (state.includes("free")){
var questionNumber = state.split('@')[1];
properties.setProperty(token , `busy@${questionNumber}`);
posting(comment,name,token,sessionsSheets,row,questionNumber);
}}
我在 App Script 中的用户从电子表格中读取他们的队列号:
var array = sessionsSheets.getRange(row, 2, 1, 3).getValues()[0];
var questionNumber = array[2]; //This is the variable of interest, it is an integer signifying the queue
sessionsSheets.getRange(`D${row}`).setFormula(questionNumber+1); //This is the updated queue
然后他们会更新此队列编号,如上所示。这种方法在大多数情况下都可以正常工作,但是如果您同时使用两个设备和 运行 脚本,它们都会收到相同的队列,并且脚本将停止其中一个,因为稍后您需要一个唯一的队列号使用幻灯片 API:
Slides.Presentations.batchUpdate({'requests': requests}, presentationId);
如果 promises 有效,我会简单地将 Slides API 行放在一个 try 块中,如果出现口是心非的错误,我会递归调用相同的函数,直到重叠不存在为止'不会发生。但是,App 脚本不支持 promises,所以我应该尝试什么?
我找到了针对我的特殊情况的修复方法:
我在 App Script 的属性服务中使用了 ScriptProperties。当用户打开应用程序时,他会使用会话令牌查找密钥的 属性。如果它说忙,他等待并递归地尝试相同的功能,如果它说空闲,他将其更改为忙碌,执行他的 API,然后最后再次将其更改为空闲。
代码片段:
function queueing(comment,name,token,sessionsSheets,row) {
var properties = PropertiesService.getScriptProperties();
var state = properties.getProperty(token);
if (state==null){
properties.setProperty(token , `busy@0`);
posting(comment,name,token,sessionsSheets,row,0);
} else if (state.includes("busy")){
Logger.log('Gotta wait my turn');
Utilities.sleep(2000);
queueing(comment,name,token,sessionsSheets,row);
} else if (state.includes("free")){
var questionNumber = state.split('@')[1];
properties.setProperty(token , `busy@${questionNumber}`);
posting(comment,name,token,sessionsSheets,row,questionNumber);
}}