-1

如果您能帮我修复此功能,那对我将非常有用:

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函数可以返回一个值。

4

2 回答 2

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 中编译成什么(例如,看看使用->=>编译时的区别你的咖啡)

于 2014-04-14T21:51:09.000 回答
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
于 2014-04-15T07:13:44.983 回答