Nil*_*ubi 1 backend google-calendar-api google-api node.js server
我正在使用 Google Calendar API,它按预期工作。但我对里面的异步方法有疑问。
因此,我有以下请求路线来获取来自特定用户的所有事件:
router.get('/api/user/calendar/listEvents', async (req, res) => {
try {
const token = "123456789"
var oAuth = authorizationHelper(token)
var events = await listEvents(oAuth, req.body.date)
res.status(200).send(events)
} catch (e) {
res.status(400).send("Error Bad Request")
console.log(e)
}
})
Run Code Online (Sandbox Code Playgroud)
我的 listEvents 方法:
async function listEvents(auth, date) {
var events;
const calendar = google.calendar({ version: 'v3', auth });
const eventsA = calendar.events.list({
calendarId: 'primary',
timeMin: date,
maxResults: 1,
singleEvents: true,
orderBy: 'startTime',
}, (err, res) => {
if (err) return console.log('The API returned an error: ' + err);
events = res.data.items;
return events
});
}
Run Code Online (Sandbox Code Playgroud)
listEvents 方法工作正常,但该函数的返回始终未定义,因为它不等待我从 Calendar API 返回的响应。
有谁知道这个问题的解决方案?
你不能像在函数async中返回一样从函数中返回listEvents,它总是会返回undefined;
解决方案:
可以将代码包装在a中promise,然后将数据传递到resolve方法中。
工作示例:
async function listEvents(auth, date) {
var events;
const calendar = google.calendar({ version: 'v3', auth });
return new Promise((resolve, reject) => {
const eventsA = calendar.events.list({
calendarId: 'primary',
timeMin: date,
maxResults: 1,
singleEvents: true,
orderBy: 'startTime',
}, (err, res) => {
if (err) {
console.log('The API returned an error: ' + err);
reject('The API returned an error: ' + err);
return;
}
events = res.data.items;
resolve(events)
});
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1281 次 |
| 最近记录: |