【问题标题】:IcedCoffeeScript or jQuery deferredIcedCoffeeScript 或 jQuery 延迟
【发布时间】:2012-07-08 01:05:12
【问题描述】:

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

IcedCoffeeScript 看起来很简单,只需添加awaitdefer。但是,我想知道它是否会留下来? StackOverflow 上只有 2 个问题?与 CoffeeScript 相比,没有太多谈论它

另一件事是这两种方法之间的区别是什么,它们似乎做的大部分事情都是一样的?除了在 IcedCoffeeScript 中,它看起来更像是过程代码,而在 jQuery deferred 中,它并没有解决我的回调问题

【问题讨论】:

  • jQuery 延迟是一件很美的事情。就个人而言,部分是因为我不使用 CS,所以我会使用它。

标签: coffeescript jquery-deferred iced-coffeescript


【解决方案1】:

这些是非常不同的技术:

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

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

这些技术中的每一种都最适用于特定类型的 API。 awaitdefer 期望函数将单个回调作为其最后一个参数。当您的应用中有许多其他 Promise 时,Promise 效果最佳。

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

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

【讨论】:

  • “当你的应用程序中有很多其他 Promise 时,Promise 效果最好”是一个有趣的说法。可以多放点肉吗?
【解决方案2】:

我认为 IcedCoffeeScript 将继续存在。

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

【讨论】:

    【解决方案3】:

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

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

    简介如下:

    “你应该选择一个事件”这个问题的明显答案 Emitter、Pub Sub 或 Deferred / Promises”是它取决于什么 你在做。

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

    总结是:

    Event Emitter 是一个真正的经典,它允许良好的实践和 控制发生的事情; Pub Sub 更灵活 跨组件事件; Deferred 和 Promises 提供了一种强大的方法 处理回调。

    将摘要应用于您的问题 - 我建议 Deferred 和 Promises 可能会对您有很大帮助。

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

    【讨论】:

      【解决方案4】:

      哦,我肯定会依赖 IcedCoffeeScript。如果你喜欢并使用 CoffeeScript 语法,你会发现它只是自然地“融合”了它......

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-20
        相关资源
        最近更新 更多