如果你可以帮我解决这个问题,对我来说非常有用:
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
函数可以返回一个值。
答案 0 :(得分:1)
回调的重点是它是异步的,你的响应是在回调中,所以你需要从回调中处理剩余的执行(例如,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中编译的内容(例如,看看使用{{编译咖啡时1}}和->
答案 1 :(得分:0)
我发现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