【发布时间】:2016-10-15 22:52:22
【问题描述】:
Abraham 对Google Calendar API : "Backend Error" code 503 的回答准确地描述了我的情况。在循环创建或删除日历条目的代码时,我在随机位置得到 503。
但是,我不知道如何遵循他从 Google 引用的建议,即捕获错误并使用指数回退重试交易。
下面的代码是一个循环,它将 8 个新事件放入我的日历中。它随机遇到 503 错误,这些错误是从 Google API 而不是我自己的代码抛出的。很多时候它工作没有错误。
Google API 代码在我的循环中异步运行,因此在我的循环完成之前,Google 的任何操作都不会真正执行。当异步代码抛出 503 时,我的代码周围的 try-catch 块不会触发。如果没有 try,我不能将 catch 放入回调函数中,这会缩小 catch 的范围排除 Google 的代码。
有什么建议吗?
/* Special date string format for all-day Google Calendar events.
Time zone independent.
*/
Date.prototype.yyyy_mm_dd = function() {
var yyyy= this.getFullYear().toString();
var mm = (this.getMonth()+101).toString().slice(-2); //get leading 0
var dd = (this.getDate()+100).toString().slice(-2);
return yyyy+'-'+mm+'-'+dd;
}
var fastevent = {
'summary': 'Fast',
'organizer': {
'self': true,
'displayName': 'Wes Rishel',
'email': 'wrishel@gmail.com'},
'start': {'date': 'zzzz'}, // filled in for each instance
'end': {'date': 'zzzz'},
'colorId': '11',
}
function addFastEvents() {
try {
var eventDate = calendar.getLastFastDate() || new Date;
for (var eventCount = 0; eventCount < 8; eventCount++) {
// advance to next Tuesday or Friday
eventDate=eventDate.addDays(
[2, 1, 3, 2, 1, 4, 3][eventDate.getDay()]
);
fastevent.start.date = eventDate.yyyy_mm_dd();
fastevent.end.date = fastevent.start.date;
var request = gapi.client.calendar.events.insert({
'calendarId': 'primary',
'resource': fastevent
});
request.execute(function(fastevent) {});
calendar.getPage(eventDate);
calendar.setCellStyle(eventDate, 'fastingweekdaydata');
} // for
} catch(e) {
p(e.message, e.name)
}
}
【问题讨论】:
标签: javascript google-api google-calendar-api http-error exponential-backoff