Abraham對Google Calendar API : "Backend Error" code 503的回答正好描述了我的情況。在循環創建或刪除日曆條目的代碼時,我隨機獲得503個。Google JavaScript API:捕捉HTTP錯誤
但是,我無法弄清楚如何遵循他從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': '[email protected]'},
'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)
}
}
感謝您的支持。看來我沒有很好地表達我的關心。我瞭解指數備份......但我不明白如何捕捉503由於HTTP調用是在一個懶惰的異步線程。 假設您在一個循環中插入十個新的日曆事件,遞增日期。在循環線程空閒之前,所有三個插入的回調函數。然後,HTTP事件的異步線程將運行,也許其中一個會拋出503.但是我的代碼無法檢測到它。我已經嘗試了Promise版本的請求,但是,令人驚訝的是,那裏沒有喜悅。 – WesR
我不知道如何編輯上面的評論,但我注意到一個更正。 「所有THREE插入的回調函數」應該是「所有TEN插入的回調函數」 – WesR