IcedCoffeeScript或jQuery延迟了

时间:2012-07-08 07:20:46

标签: coffeescript jquery-deferred iced-coffeescript

最近在开发Backbone.JS / jQuery / CoffeeScript项目时,我发现自己陷入了一堆回调和时间问题。我需要等待一些事情才能完成,然后发现自己陷入了一堆嵌套的回调......这让人感到困惑和难以调试。然后我找到了2个可能的解决方案jQuery deferredIcedCoffeeScript

IcedCoffeeScript看起来非常简单,只需添加await& defer。但是,我不知道它会留下来吗? StackOverflow上只有2个问题吗?与CoffeeScript相比,没有太多谈论它

另外一个问题是两种方法之间的区别是什么,它们似乎大致相同?除了在IcedCoffeeScript中,它看起来更像是程序代码,并且在jQuery延迟中,它并没有解决我的混乱回调

4 个答案:

答案 0 :(得分:18)

这些是非常不同的技术:

  • IcedCoffeeScript 是一个预编译器,它使用awaitdefer关键字扩展CoffeeScript,为您转换代码,以便您可以以同步方式编写代码。在生成的JavaScript中,awaitdefer生成嵌套函数。

  • jQuery Deferred (又名 Promises )是一种完全支持回调的方式:异步函数可以返回Promise,而不是进行回调。然后,您将回调附加到Promise。这是一种简单但功能强大的技术。我在我的书 Async JavaScript 中专门写了一章。

这些技术中的每一种都适用于某种API。 awaitdefer期望函数将单个回调作为其最后一个参数。当你的应用中有很多其他Promise时,Promise最有效。

在JavaScript中处理异步行为没有灵丹妙药。您需要了解回调,Promises和PubSub(又名EventEmitter)并为每项工作选择最佳工具。即使你使用IcedCoffeeScript(这很酷),Promise仍然会为你节省大量的工作。

我希望有所帮助。查看我的书 Async JavaScript ,了解更多信息。

答案 1 :(得分:17)

我认为 IcedCoffeeScript 就在这里。

我计划无限期地支持它,而且我经常在主线上修补它。我几乎在所有个人项目中都使用它,而网站Combosaurus.com,一个即将发布的 OkCupid Labs 项目,是用 IcedCoffeeScript编写的。

答案 2 :(得分:4)

我写了一篇关于标准事件回调,pub sub和deferreds之间差异的博客文章,这可能对你有所帮助:

Event Emitter, Pub Sub or Deferred Promises … which should you choose?

介绍内容如下:

  

问题的明显答案“你应该选择一个事件   Emitter,Pub Sub或Deferred / Promises“取决于什么   你在干嘛。

     

在这篇文章中,我将探讨一下每种模式的工作原理   (非常)基本实现,然后我会看看原因   你可以选择一个而不是另一个。

摘要是:

  

事件发射器是一个真正的经典,并允许良好的做法和   控制发生的事情; Pub Sub更灵活   跨组件事件;延迟和承诺提供了一种强有力的方式   处理回调。

将摘要应用于您的问题 - 我建议Deferred's和Promises可能会帮助您解决问题。

我不了解你,但我发现如何实现Deferred真的帮助我理解使用它的复杂性。我在帖子中也包含了一些示例代码,这些代码非常简单,在查看别人更强大的尝试时可能会帮助你。

答案 3 :(得分:2)

哦,我肯定会依赖IcedCoffeeScript。如果您喜欢并使用CoffeeScript语法,您会发现它只是简单地“混合”它......

关于项目的未来,我前段时间也遇到了同样的困境,但看起来Maxwell Krohn正在积极维护它,并且有一个不断增长的社区和意识(好吧,也许还没有在stackoverflow上)。

我去年开始使用它,现在我无法想象在没有awaitdefer的情况下编写“真实”应用。

你可以在ICS here的优雅异步控制流程上找到一个简短的“protip”,我还写了一个5部分ironically-titled article on using Node.js for generic web projects here提到ICS。