Возвращаемое значение из jquery get callback-функции
Было бы очень полезно для меня, если бы вы могли помочь мне исправить эту функцию:
textParseQuery = (txtSnippet) ->
queryUrl = "http://localhost:8083/txtParse/#{txtSnippet}"
console.log queryUrl
callback = (response) =>
parsed = $.parseJSON response
companies = parsed.map (obj) -> new Company(obj.name, obj.addr)
companies
res = $.get queryUrl, {}, callback
console.log res
Я хотел бы получить результаты обратного вызова, чтобы textParseQuery
функция может вернуть значение.
2 ответа
Я обнаружил, что IcedCoffeeScript помогает оптимизировать поток асинхронного управления с await
а также defer
, Это то, что я пытался достичь. Структура кода - это то, как я это изобразил
# Search for 'keyword' on twitter, then callback 'cb'
# with the results found.
search = (keyword, cb) ->
host = "http://search.twitter.com/"
url = "#{host}/search.json?q=#{keyword}&callback=?"
await $.getJSON url, defer json
cb json.results
Смысл обратного вызова в том, что он асинхронный, ваш ответ приходит на обратный вызов, поэтому вам нужно обработать остальную часть выполнения из обратного вызова (например, console.log res
будет выполняться до того, как будет вызван ваш обратный вызов, так как это часть того же синхронного выполнения вашего вызова ajax).
textParseQuery = (txtSnippet) ->
queryUrl = "http://localhost:8083/txtParse/#{txtSnippet}"
callback = (response) ->
parsed = $.parseJSON response
companies = parsed.map (obj) -> new Company(obj.name, obj.addr)
# proceed from here
console.log companies
$.get queryUrl, {}, callback
Дополнительное примечание: жирная стрелка здесь не нужна, она используется для того, чтобы this
ссылается, но вы не ссылаетесь this
на все в вашем обратном вызове. Если вы изучаете кофе, у большинства редакторов есть плагин / модули для быстрой компиляции кофе в JS, так что используйте его, чтобы увидеть, с чем компилируется данный синтаксис кофе в JS (например, посмотрите на разницу между использованием ->
а также =>
когда собираешь свой кофе)