我正在使用dialogflow构建和聊天机器人,并将其与Google日历集成。我已经可以预定一个约会,但是我的问题是我想计算一个时间间隔内出现的事件数。我可以使用以下代码在日志中写入正确的值来执行此操作:
function get_events(dateTimeStart1,dateTimeEnd1){
calendar.events.list({ // List all events in the specified time period
auth: serviceAccountAuth,
calendarId: calendarId,
timeMin: dateTimeStart1.toISOString(),
timeMax: dateTimeEnd1.toISOString()
}, (err,res) => {
const events = res.data.items;
const number_events = events.length;
console.log(number_events);
});
}
问题是我想返回值number_events以将其用于其他目的,但我不知道该怎么做。
我想做这样的事情。
function get_events(dateTimeStart1,dateTimeEnd1){
calendar.events.list({ // List all events in the specified time period
auth: serviceAccountAuth,
calendarId: calendarId,
timeMin: dateTimeStart1.toISOString(),
timeMax: dateTimeEnd1.toISOString()
}, (err,res) => {
const events = res.data.items;
const number_events = events.length;
console.log(number_events);
});
return number_events;
}
您能帮我吗?谢谢
这个答案怎么样? calendar.events.list
返回承诺。因此,您可以进行如下修改。
在此修改例中,假设在函数get_events
中调用了run
。
async function get_events(dateTimeStart1,dateTimeEnd1){
const res = await calendar.events.list({
auth: serviceAccountAuth,
calendarId: calendarId,
timeMin: dateTimeStart1.toISOString(),
timeMax: dateTimeEnd1.toISOString(),
});
const events = res.data.items;
const number_events = events.length;
return number_events;
}
async function run() {
// do something
const res = await get_events(dateTimeStart1, dateTimeEnd1);
console.log(res);
// do something
}
尽管我不确定这是否是您期望的方向,但是当不使用async functions
时,以下脚本如何?
function get_events(dateTimeStart1, dateTimeEnd1) {
return new Promise((resolve, reject) => {
calendar.events.list(
{
auth: serviceAccountAuth,
calendarId: calendarId,
timeMin: dateTimeStart1.toISOString(),
timeMax: dateTimeEnd1.toISOString(),
},
(err, res) => {
if (err) reject(err);
const events = res.data.items;
const number_events = events.length;
resolve(number_events);
}
);
});
}
function run(creds) {
// do something
get_events(calendar, dateTimeStart1, dateTimeEnd1).then((res) =>
console.log(res)
);
// do something
}