我试图用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的承诺?
答案 0 :(得分:4)
listUpcomingEvents().then(function(events){
//Whatever goes after
}).catch(function(err){
//What happens if the promise was rejected
});
当您致电 listUpcomingEvents 时,您必须返回一个新承诺,这将代表尚未完成的操作;当您调用或拒绝时,此操作将完成,如果已解决,则将继续然后;如果已被拒绝,则捕获。
调用 listUpcompingEvents 看起来像这样:
{{1}}
希望这会有所帮助:)