2015-03-09 4 views
0

Рассмотрим этот надуманный примерСледите запросов-ответов обожженных в цикле

reqs = for url in urls 
    $.ajax 
    url: url 
    successs: (resp) => 
     # here, url is always the last url, 
     # apparently because closure doesn't copy the captured locals 
     console.log "response for url: #{url}" 

Что является лучшим способом, чтобы определить, какие URL принадлежат к которому запрос в случае успеха?

Позже, есть вызов

$.when(reqs...).then (resps...) => 
    console.log(resps) 

Тем не менее, в настоящее время способ узнать, потому что порядок resps может отличаться от reqs "порядка, верно?

+0

Отправить уникальный «ключ» случайным образом наряду с запросом, используйте это для ключа в массиве соотв. Попросите, чтобы обратный процесс отправил этот ключ обратно с ответом, чтобы сохранить данные ответа в соответствующей паре ключ/значение. – Drew

+0

@Drew, это может быть разумным вариантом, если у вас есть доступ к внутреннему коду, но что, если вы этого не сделаете? Я думаю, что должен быть способ сделать это только на стороне интерфейса, но у меня заканчиваются идеи. – evfwcqcg

+1

Я не знаю coffeescript, но в простом JS вы можете сделать 'url' правильным в обработчике' success', завернув вызов в сразу вызываемую функцию и передав текущий url in - например, в [этот ответ] (http://stackoverflow.com/a/19324832/791010) - возможно ли это в coffeescript? –

ответ

0

Благодаря замечанию Джеймса, решение

reqs = for url in urls 
    success_fn = (url) => 
    (resp) => 
     console.log "response for url: #{url}" 
     console.log resp 
    $.ajax 
    url: url 
    successs: success_fn(url)