Abrahamさんの回答Google Calendar API : "Backend Error" code 503は私の状況を正確に表しています。私はカレンダーエントリを作成または削除するコードをループするときにランダムな場所に503を取得します。Google JavaScript API:HTTPエラーをキャッチ
しかし、彼がGoogleから引用したアドバイスに従う方法を理解することはできません。これは、エラーを捕捉し、指数関数的なバックオフを使用してトランザクションを再試行することです。
以下のコードは、8つの新しいイベントをカレンダーに入れるループです。ランダムに503のエラーが発生し、これは自分のコードではなくGoogle APIからスローされます。何度もエラーなく動作します。
Google APIコードは自分のループから非同期で実行されるため、ループが完了するまで実際にGoogleのアクションは実行されません。私のコードを囲むtry-catch
ブロックは、非同期コードが503をスローするときには起動しません。なしで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)
}
}
ありがとうございます。私は自分の懸念をうまく表現していないようです。私は指数バックアップを理解しています...しかし、私は怠惰な、非同期スレッドでHTTP呼び出しのために503をキャッチする方法を理解していません。 ループ内に10個の新しいカレンダーイベントを挿入し、日付を増やしたとします。ループスレッドがアイドルになる前の3つすべての挿入に対するコールバック関数。 HTTPイベントの非同期スレッドが実行され、おそらくそのうちの1つが503をスローします。しかし、私のコードはそれを検出する方法がありません。私は約束のバージョンのリクエストを試みましたが、驚くべきことにそこには喜びはありません。 – WesR
上記のコメントの編集方法はわかりませんが、訂正に気付きました。 "すべてのTHREEインサートのコールバック関数"は "すべてのTENインサートのコールバック関数" – WesR