【问题标题】:How does CoffeeScript handle Asynchronous Calls?CoffeeScript 如何处理异步调用?
【发布时间】:2011-09-18 08:45:18
【问题描述】:

当前的异步 JavaScript 调用要求我们使用回调函数。当您需要根据第一次 Ajax 调用中返回的数据进行第二次 Ajax 调用时,这可能会导致“兔子洞”代码。

已经尝试在不使用回调的情况下进行异步 JavaScript 调用。谷歌,Narative.js。目标是更易于管理和可读的代码。

我的问题是,CoffeeScript 如何处理像 Ajax 这样的异步 JavaScript 调用?是否需要回调或者可以在没有回调的情况下进行异步调用?

【问题讨论】:

    标签: javascript asynchronous coffeescript


    【解决方案1】:

    您可以使用 jquery $.when(不是特定于咖啡脚本)使事情更清楚。

    var firstCall = $.get 'stuff.json'
    $.when(firstCall).then #make second call
    

    【讨论】:

    • 真的有这个感觉。过去几个小时我一直在研究 jQuery。
    【解决方案2】:

    Coffeescript 是一种有人认为比 Javascript 更清晰、更简洁、更易于编写和阅读的语言。 Coffeescript 编译为 Javascript,然后在 Javascript 虚拟机上运行。归根结底,Coffeescript 只能做 Javascript 能做的事情。

    CoffeeScript 如何处理异步调用?

    像 Javascript。如果要使用回调,请使用回调。如果您想使用 Narative.js,请使用它。如果您想使用 Jquery,请使用它。

    【讨论】:

      【解决方案3】:

      CoffeeScript 不提供任何针对异步性的特定功能,因为这必然会导致 CoffeeScript 代码和 JavaScript 输出之间存在很大差距。请参阅有关建议的defer 语法的讨论:

      https://github.com/jashkenas/coffee-script/issues/350

      因此,如果您使用 CoffeeScript,您应该使用与 JavaScript 中相同的习惯用法和库来处理异步行为。不同之处在于您的回调将写为-> ... 而不是function() {...}

      【讨论】:

      • 感谢您的光临。我一直在关注那个讨论。对于它的价值,我相信延迟功能将使 CoffeeScript 不可否认。 @gfxmonk 给了它一个很好的结果,我非常赞扬他。他写了一篇关于延期提议的帖子——每一个字都好像是我自己写的——我真的被收回了。处理异步逻辑确实是 JavaScript 最不直观的特性之一。对于那些对文章感兴趣的人:gfxmonk.net/2010/07/04/…
      • 最后的话我希望CoffeeScript中存在这个功能。
      【解决方案4】:

      您可能希望采用https://github.com/mirek/node-flat-flow 方法来使调用链扁平化。它与咖啡脚本配合得很好。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-06-10
        • 2018-08-05
        • 2021-08-28
        • 2015-11-18
        • 1970-01-01
        • 1970-01-01
        • 2018-03-15
        • 1970-01-01
        相关资源
        最近更新 更多