async await あたりが、どうしても実務で使えるような理解に追いつかないっぽいです。。。
複数のGoogleCalendarからエベントを取得して、マージしたものをサイトに使いたく、
まずはGoogleAppScriptでスプレッドシートに書き出し→スプレッドシートをAPIとして利用
を行いました。
ただ、なんか、不安定で、時々返ってこないでエラーになることが起きるので、
直接GoogleCalendarから呼び出そうかな?と考えました。
そして、書いたのが↓です。
IDs = [ 111 , 222, 333 ] //実際はgoogleCalendarのID PARAMS = { // 取得時に使うパラメーター } async function getCalEvents(cal) { gapi.client.init({ 'apiKey': API_KEY, }).then(function() { return gapi.client.request({ 'path': 'https://www.googleapis.com/calendar/v3/calendars/' + encodeURIComponent(cal.calID) + '/events', 'params': PARAMS }) }).then(function(response) { console.log(response) //※A }, function(reason) { console.log('Error: ' + reason.result.error.message); }); }; let ev = [] for (let i = 0; i < CALENDAR_IDs.length; i++ ) { gapi.load('client', function(){ getCalEvents(CALENDAR_IDs[i]).then(function(res) { ev.push(res) }) }); console.log(ev) //※B }
すると、結果は
// ※Bのlog [undefined, undefined, undefined] // ※Aのlog CalendarID 111 の結果Object CalendarID 222 の結果Object CalendarID 333 の結果Object
になります。
getCalEvents
の1個目のthenの中にfor文および、配列へのpushを持たせたり、いろいろしてみたのですが、うまくいかず。。。
なにか方法はありませんでしょうか?
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。