【问题标题】:return value from a jquery get callback function从jquery获取回调函数的返回值
【发布时间】:2014-05-28 08:24:41
【问题描述】:

如果你能帮我修复这个功能,那对我非常有用:

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

【问题讨论】:

  • 我想用惯用的咖啡脚本代码得到答案(使用粗箭头´=>´?)
  • 你的意思是你不知道如何在 JS 和 CS 之间转换?那就用JS吧。
  • 将 JS 翻译成 coffeescript 可能意味着不使用后者的特殊功能。当我尝试学习coffeescript时,看看这种语言与javascript相比如何做不同的事情会很有用
  • 回调或承诺没有区别。 CS这里只是加了一个装饰层,后面你要明白它是怎么做的。

标签: callback coffeescript iced-coffeescript


【解决方案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 中编译成什么(例如,看看使用 ->=>当你编译你的咖啡时)

【讨论】:

  • 谢谢。在 IcedCoffeeScript 的帮助下,我确实设法按照我的想法构建了代码
【解决方案2】:

我发现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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-25
    • 2011-11-13
    • 2012-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-24
    相关资源
    最近更新 更多