Асинхронность и область действия Coffeescript

У меня есть массив URL-адресов, которые я извлекаю и обрабатываю, на ключи которых я хотел бы ссылаться при возврате данных. Каков предпочтительный способ гарантировать, что значение, определенное до асинхронного HTTP-вызова, переносится в закрытие, которое будет выполняться при возврате данных? В следующем примере переменная calendar_name (как и ожидалось) теряется при возврате данных из HTTP-вызова, и мне нужно иметь возможность ссылаться на это значение внутри замыкания:

cals = {
  "calendar one":"http://example.com/info/webcal/abc123.ics",
  "calendar two":"http://example.com/info/webcal/xyz789.ics"
}
for calendar_name,calendar_url of cals
  # Note that this is a Hubot script and the following line performs an HTTP call
  msg.http(calendar_url)
    .get() (err, res, body) ->
      if res.statusCode is 200 and !err?
        ics = ical.parseICS(body)
        event_list = []
        for _, event of ics
          if event.type == 'VEVENT'
            event_list.push event.summary
        console.log("Scheduled events for " + calendar_name)
        for event, k in event_list
          console.log(event)

person Andy Soell    schedule 22.06.2015    source источник
comment
Я не уверен, что понимаю. Вы спрашиваете, почему в обратном вызове доступно только последнее значение имени календаря [например, см. все связанные с этим вопросы js)?   -  person Dave Newton    schedule 22.06.2015
comment
Я не спрашиваю почему, я логически понимаю, почему это происходит. Я спрашиваю, как я могу обойти это, чтобы переменная за пределами области обратного вызова была сохранена для будущего использования внутри обратного вызова. Если есть вопрос JS (или, что еще лучше, вопрос Coffeescript), который касается этого, я бы хотел помочь.   -  person Andy Soell    schedule 22.06.2015
comment
Я почти уверен, что дубликат правильный, дайте мне знать, если я ошибаюсь.   -  person mu is too short    schedule 22.06.2015
comment
Попался, @muistooshort. Спасибо за помощь, я искал кучу и просто не мог найти правильный ответ. Ваше здоровье!   -  person Andy Soell    schedule 22.06.2015
comment
Не беспокойтесь, гораздо проще найти дубликат, когда вы уже знаете ответ.   -  person mu is too short    schedule 22.06.2015