В настоящее время у меня есть приложение NodeJS, в котором я хочу получить список событий и после этого создать с ним структуру данных, но мое обещание не ждет возврата функции, вот код:
Это должно дождаться возврата getEvents и затем записать полученное значение
console.log("Schedule");
scheduler.getEvents(searchRange)
.then((value) => {
console.log("value");
console.log(value);
});
Это функция getEvents, которая использует api календаря для получения списка событий в календаре клиента, она должна вернуть na,но он на самом деле возвращается до того, как календарь API вернет список.
async function getEvents(searchRange) {
let na = [];
calendarAPI.listEventsIntervalAPI(searchRange.startDate, searchRange.endDate, (events) => {
events.forEach((event) => {
na.push({
start: moment(event.start.timeDate),
end: moment(event.end.timeDate)
});
});
return na;
});
}
И, наконец, вызов API, который получает список событий календаря:
async function listEventsIntervalAPI(dI, dE, callback) {
let dateInitial = moment(dI).toDate();
let dateEnd = moment(dE).toDate();
const calendar = google.calendar({ version: 'v3' });
calendar.events.list({
auth: oauth2Client,
calendarId: 'primary',
timeMin: dateInitial.toISOString(),
timeMax: dateEnd.toISOString(),
maxResults: 10,
singleEvents: true,
orderBy: 'startTime',
}, (err, { data } = {}) => {
if (err) {
return console.log('The API returned an error: ' + err);
}
const events = data.items;
if (events.length) {
callback(events);
} else {
console.log('No upcoming events found.');
callback(events);
}
});
}
Мой вопрос: почему возвращениене правильно ждать?Я знаю, что calendar.list не является асинхронным, но есть ли способ дождаться этого возвращения и сделать это синхронно?Я попытался вставить обратный вызов в вызов func или просто переключиться в асинхронный режим и использовать await, но ничего не получалось.Заранее спасибо.