我在处理程序函数中遇到此错误,但我不知道导致它的原因。我已复制代码并在非处理函数中调试它,并且没有错误。
function _responseToNext(e) {
var app = UiApp.getActiveApplication();
app.getElementById('btnPrev').setEnabled(true);
var current = parseInt(CacheService.getPublicCache().get('currentItem'));
var agendaItems = Utilities.jsonParse(CacheService.getPublicCache().get('agenda'));
agendaItems[current]['notes'] = e.parameter.tAreaNotes;
agendaItems[current]['status'] = e.parameter.lboxStatus;
CacheService.getPublicCache().put('agenda', Utilities.jsonStringify(agendaItems));
current = current + 1;
CacheService.getPublicCache().put('currentItem', current);
fillAgendaDetail(app);
// only enabled 'Next' if there are more items in the agenda
if (current < agendaItems.length-1) {
app.getElementById('btnNext').setEnabled(true);
}
return app;
}
答案 0 :(得分:0)
我想,错误原因是当缓存为空时,Cache get
方法在第一次执行期间返回null。 Utilities.jsonParse
抛出异常,缓存在任何情况下都变为空。尝试使用以下修改后的代码。
function _responseToNext(e) {
var app = UiApp.getActiveApplication();
app.getElementById('btnPrev').setEnabled(true);
var cachedCurrent = CacheService.getPublicCache().get('currentItem');
var current;
if (cachedCurrent == null) {
current = 0;
}
else {
current = parseInt(cachedCurrent);
}
var cachedAgendaItems = CacheService.getPublicCache().get('agenda');
var agendaItems;
if (cachedAgendaItems == null) {
agendaItems = [][];
}
else {
agendaItems = Utilities.jsonParse();
}
agendaItems[current]['notes'] = e.parameter.tAreaNotes;
agendaItems[current]['status'] = e.parameter.lboxStatus;
CacheService.getPublicCache().put('agenda', Utilities.jsonStringify(agendaItems));
current = current + 1;
CacheService.getPublicCache().put('currentItem', current);
fillAgendaDetail(app);
// only enabled 'Next' if there are more items in the agenda
if (current < agendaItems.length-1) {
app.getElementById('btnNext').setEnabled(true);
}
return app;
}
另请注意,公共缓存(CacheService.getPublicCache()
)对于脚本的所有用户都是相同的。在您的情况下,这意味着,如果两个用户user1@example.com
和user2@example.com
使用该脚本,则他们将具有相同的current
和agendaItems
变量值,即它可能是一种情况_responseToNext
处理程序已在user1
权限下执行 - current
变量等于1,在user2执行_responseToNext
处理程序后 - current
变量等于2,依此类推。如果您不需要此类行为,请使用CacheService.getPrivateCache()
。