Google Calendar API和JS Promises

时间:2015-10-22 23:45:58

标签: javascript api asynchronous es6-promise

我试图用Google Calendar API编写我的第一个原生JS承诺。我已经删除了Google Calendar API的JavaScript快速入门代码,并将它返回给我一个包含10个对象的数组作为" events"从我的日历。

我试图在vanilla JS中使该API调用成为一个承诺,然后,当它被解析时,对数据执行某些操作(为简单起见,我只是尝试console.log它)

以下是基本的G-Calendar API调用代码。

var CLIENT_ID = 'SUPER_SECRET_ID_GOES_HERE';
var SCOPES = ["https://www.googleapis.com/auth/calendar.readonly"];

function checkAuth() {
    gapi.auth.authorize(
      {
        'client_id': CLIENT_ID,
        'scope': SCOPES.join(' '),
        'immediate': true
      }, handleAuthResult);
}

function handleAuthResult(authResult) {
  if (authResult && !authResult.error) {
    loadCalendarApi();
  }
}

function loadCalendarApi() {
  gapi.client.load('calendar', 'v3', listUpcomingEvents);
}

function listUpcomingEvents() {
  var request = gapi.client.calendar.events.list({
    'calendarId': 'primary',
    'timeMin': (new Date()).toISOString(),
    'showDeleted': false,
    'singleEvents': true,
    'maxResults': 10,
    'orderBy': 'startTime'
  });

  request.execute(function(resp) {
    var events = resp.items;
    // console.log(events)
    // return( events )
    // these are the event objects I want my promise to 
  })
}

现在我知道原生JS承诺的基本结构看起来像这样......

function testPromise() {

  var p1 = new Promise(
    function(resolve, reject) {
        //Google-Calendar-API-Call Goes Here 
    }
  );

  p1.then(
    function(val) {
      console.log(val)
    })
  .catch(
    function(reason) {
      console.log('Handle rejected promise (' + reason + ') here.');
    });
}

我尝试了一些不同的方法来调用resolve(loadCalendarApi)和/或解析(listUpcomingEvents),但还没有得到任何控制台日志。

我做错了什么,我应该如何正确使用Google-Calendar API的承诺?

1 个答案:

答案 0 :(得分:4)

listUpcomingEvents().then(function(events){
  //Whatever goes after
}).catch(function(err){
  //What happens if the promise was rejected
});

当您致电 listUpcomingEvents 时,您必须返回一个新承诺,这将代表尚未完成的操作;当您调用或拒绝时,此操作将完成,如果已解决,则将继续然后;如果已被拒绝,则捕获

调用 listUpcompingEvents 看起来像这样:

{{1}}

希望这会有所帮助:)