从jquery获取回调函数返回值

时间:2014-04-14 11:35:03

标签: callback coffeescript iced-coffeescript

如果你可以帮我解决这个问题,对我来说非常有用:

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 个答案:

答案 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有助于使用awaitdefer简化异步控制流程。这是我试图实现的目标。代码结构是我描绘它的方式

# 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