2013-08-19 2 views
0

Таким образом у меня есть функция, как это -обходящие асинхронные запросы

IPGeocoding = (data) -> 
    coords = [] 
    _.each(data, (datum) -> 
     $.ajax(
      url: "http://freegeoip.net/json/#{datum}" 
      type: 'GET' 
      async: false 
      success: (result) -> 
      lat = result.latitude 
      lon = result.longitude 
      pair = [lat, lon] 
      coords.push(pair) 
      console.log coords 
     ) 

    return coords 


    ) 

Я хочу Coords к только возвращается, когда все запросы вернулись. Как мне это сделать?

+0

Возможно, вы не хотите «асинхронный: ложный», если вы не ненавидите людей, использующих ваш сайт. –

ответ

2

Подложка поставляется в комплекте с методом _.after. _.after принимает два аргумента. Вторая - это функция, которую вы хотите выполнить, а первая - количество раз, когда вы ожидаете, что она будет вызвана до того, как вы ее выполнили. Его можно использовать следующим образом, чтобы выполнить то, что вы пытаетесь сделать:

IPGeocoding = (data, callback) -> 
    coords = [] 
    finish = _.after(data.length, callback) 
    _.each(data, (datum) -> 
     $.ajax(
      url: "http://freegeoip.net/json/#{datum}" 
      type: 'GET' 
      async: false 
      success: (result) -> 
       lat = result.latitude 
       lon = result.longitude 
       pair = [lat, lon] 
       coords.push(pair) 
       console.log coords 

       finish(coords) 
     ) 
    ) 
+0

Я думаю, что ваш отступ выключен (как будто в вопросе нет). –

+0

Я скопировал его из вопроса. Я никогда не использую coffeescript, поэтому я честно не знаю, что синтаксически правильно, а что нет. – THEtheChad

+0

спасибо - Интересно, как они воплотили это значение – praks5432