【发布时间】:2020-06-10 18:40:45
【问题描述】:
我正在努力处理对 Google Calendar API 的调用。根据我的需要,我稍微修改了 Google API 文档中的 Node.js 快速入门。我正在尝试从日历中检索所有事件,但是当我尝试等待返回时,我得到的只是Promise { <pending> }。有没有更好的方法来等待电话,还是我完全错过了什么?
async function listEvents() {
const calendar = google.calendar({version: 'v3', auth: apiKey});
return await calendar.events.list({
calendarId: <calendarID>,
timeMin: oneWeekAgo,
maxResults: 10,
singleEvents: true,
orderBy: 'startTime',
}, (err, res) => {
if (err) return console.log('The API returned an error: ' + err);
const events = res.data.items;
if (events.length) {
events.forEach(el => console.log(el.summary))
// console.log(events)
// eventList = events
return events
} else {
console.log('No upcoming events found.');
}
});
}
FWIW,事件最终会记录到控制台,我只是不知道如何让函数在返回之前等待该承诺解决。
【问题讨论】:
-
您好,欢迎来到 SO。我认为你想说的是,由于调用
listEvents,你得到了Promise { <pending> }。那是对的吗?如果是这样,那是因为listEvents被标记为asycn函数。所有async函数都隐式返回Promise。所以,你需要await你的listEvents打电话,或者打电话给.then就可以了。此外,除非您有意尝试抛出网络错误,否则您永远不需要执行return await,因为如上所述,使用async无论如何都会将函数返回包装在Promise中。 -
那么你的 aync 函数显然会返回一个 `Promise {
}`,使用 .then() 让它在解决后显示事件? -
谢谢。是的,它正在返回
Promise { <pending> }。原始示例没有返回任何内容,只是记录了结果。我在第 1 行添加了async,在第 3 行添加了await,在底部添加了return events。我假设它返回的未决承诺是对calendar.events.list()的调用,因为当我删除 async/await 时,它返回undefined(悬停在 .list() 上表示这是一个 GaxiosPromise)。如果我加了.then(),那会是listEvents().then(<do something with the return>)吗?
标签: javascript node.js google-api-nodejs-client