Я использую библиотеку async (http://caolan.github.io/async/docs.html#map) для обработки некоторых моих асинхронных вызовов в приложении-узле. Моя проблема заключается в том, что, когда я использую метод map async, вызов вызова метода вызывается до того, как все функции iterate будут завершены. Кто-нибудь знает, почему?Вызов вызова Async перед выполнением функций iterate
Вот код, где карта называют:
function divvy(email, project, oauth2Client, callback) {
getUserPreferences(email, (preferences) => {
calendars.getCalendars(oauth2Client, (calendars) => {
var calendarIds = calendars.map(function(obj) { return obj.id })
console.log('length of calendarIds is: '+calendarIds.length)
asyncMap(calendarIds, events.getEventsUpTo.bind(null, project.end, oauth2Client), function(err, results) {
// results is now an array of arrays.
// Each array within results is an array of events per calendarList
console.log('final callback is called')
callback(true)
});
})
})
}
А вот iteratee код вызывается для каждого элемента в calendarIds:
function getEventsUpTo (projectEnd, oauth2Client, calendarId, callback) {
calendar.events.list({
auth: oauth2Client,
calendarId: calendarId,
timeMin: (new Date()).toISOString(),
timeMax: projectEnd.toISOString(),
maxResults: 10,
singleEvents: true,
orderBy: 'startTime',
}, (err, response) => {
if (err) {
// console.error('The API returned: ' + err)
console.log('reach callback call within iteratee function')
callback(null, null)
} else {
var events = response.items
if (events.length === 0) {
callback('No upcoming events')
} else {
console.log('reach callback call within iteratee function')
callback(null, events)
}
}
})
}
Наконец, вот вывод на консоль:
length of calendarIds is: 6
reach callback call within iteratee function
reach callback call within iteratee function
reach callback call within iteratee function
final callback is called
reach callback call within iteratee function
reach callback call within iteratee function
Немного контекста: я использую карту для извлечения списков событий календаря из API Календаря Google.
Спасибо!
Try и положить 'console.log («достигает обратный вызов в пределах iteratee функции»)' в начале функция getEventsUpTo. Также строка 'callback (true)' находится не в том месте. – SpiderPig