Google 日历 API 和 JS Promises
Google Calendar API and JS Promises
我正在尝试使用 Google 日历 API 编写我的第一个原生 JS promise。我已经删除了 Google 日历 API 的 JavaScript 快速入门代码,并让它从我的日历中返回一个包含 10 个对象的数组作为 "events"。
我试图在 vanilla JS 中,使 API 调用一个 promise,然后,当它被解决时,对数据做一些事情(为简单起见,我只是想 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 promise 的基本结构看起来像这样...
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) and/or resolve(listUpcomingEvents) 的不同方法,但没有得到任何控制台日志。
我做错了什么,我应该如何正确使用我对 Google-Calendar API 的承诺?
function listUpcomingEvents() {
//List upcoming events will return a new Promise
return new Promise(function(resolve,reject){
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;
//After the request is executed, you will invoke the resolve function with the result as a parameter.
resolve(events);
})
});
}
当您调用 listUpcomingEvents 时,您必须 return 一个新的承诺,这将代表一个尚未完成的操作;当您调用 resolve 或 reject 时,此操作将完成并继续执行 then(如果已解决)或 catch(如果被拒绝) .
调用 listUpcompingEvents 看起来像这样:
listUpcomingEvents().then(function(events){
//Whatever goes after
}).catch(function(err){
//What happens if the promise was rejected
});
希望这对您有所帮助:)
我正在尝试使用 Google 日历 API 编写我的第一个原生 JS promise。我已经删除了 Google 日历 API 的 JavaScript 快速入门代码,并让它从我的日历中返回一个包含 10 个对象的数组作为 "events"。
我试图在 vanilla JS 中,使 API 调用一个 promise,然后,当它被解决时,对数据做一些事情(为简单起见,我只是想 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 promise 的基本结构看起来像这样...
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) and/or resolve(listUpcomingEvents) 的不同方法,但没有得到任何控制台日志。
我做错了什么,我应该如何正确使用我对 Google-Calendar API 的承诺?
function listUpcomingEvents() {
//List upcoming events will return a new Promise
return new Promise(function(resolve,reject){
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;
//After the request is executed, you will invoke the resolve function with the result as a parameter.
resolve(events);
})
});
}
当您调用 listUpcomingEvents 时,您必须 return 一个新的承诺,这将代表一个尚未完成的操作;当您调用 resolve 或 reject 时,此操作将完成并继续执行 then(如果已解决)或 catch(如果被拒绝) .
调用 listUpcompingEvents 看起来像这样:
listUpcomingEvents().then(function(events){
//Whatever goes after
}).catch(function(err){
//What happens if the promise was rejected
});
希望这对您有所帮助:)