我的问题很笼统,可以在 SO 上找到一些相关问题,但这些都不是我要找的。
我一直在阅读/玩弄 jQuery Deferred object我看到它在库本身内部被大量使用来处理 ajax 请求和动画等。我了解一般功能,并认为它已被证明在某些情况下非常有用。 jQuery 库使用这个概念非常优雅地解决了一些问题。 现在我的问题是:我认为概述不同的问题/解决方案场景会非常有用,这些场景可以使用 Deferred 对象优雅而稳健地解决。 在哪些情况下需要使用 jQuery Deferred 的解决方案? javascript 软件设计中的哪些一般模式可以区分,可以使用 jQuery 延迟功能最优雅地解决?我打算本着每个 OO 分析师都知道的四种设计模式的精神,编制一份非常一般模式的列表(而不是非常具体的示例)。 有了这样一个 list ,在设计 jQuery 解决方案时,利用这些延迟模式应该成为第二天性,就像桥、工厂等模式已经帮助我们设计灵活的和强大的解决方案,而无需每次都重新发明轮子。
最佳答案
异步任务大致分为 5 个不同的问题领域。
可能是最常见的,Fabrizio Calderan 的回答很好地涵盖了这一点。在这些情况下,我们必须处理至少 2 个结果,并根据粒度(请求的各种类型的成功或错误),然后对它们采取行动。
Deferred/Promises 允许我们链接或并行化请求,或两者的混合,以实现我们任务所需的资源加载。例如,我们可以等待一系列请求完成,然后再加载更多请求,或根据这些结果执行其他操作。
链接/并行动画序列更易于实现和维护。基于不同结果的条件步骤(在考虑用户交互或随机因素时。)也易于实现和维护。
真正的模态操作在浏览器中是不可能的,并且呈现对话框、向导等需要 Deferred/Promises 提供的异步操作在清理之前对解决的结果(成功、事件、选项、取消等)起作用显示(也已简化,如前所述)并恢复正常操作。 Deferred/Promises 允许您以相对简单的声明方式对这些结果采取行动。
有效地将用户交互与动画/显示序列结合起来。
移动设备的可用性(例如通过 PhoneGap)需要在调用它们以获取服务之前得到保证,并且在许多情况下,提供异步响应。使用 Deferred/Promises 可以简化和改进管理这些设备交互的代码。
具体来说,SQLLite 提供了它对 JS 请求的异步响应,因此进行复杂的查询交互比使用回调要简单得多。
理论上,这适用于提供异步响应的任何辅助软件组件。
这是我读过的关于 Deferred/Promises 的最好的文章之一,我建议阅读它以获得一些适当的深入示例和解释。
Deferred/Promises 的最大好处是,它们使多个领域的解决方案更容易在一开始就构思出来,然后再进行维护。在某些情况下,他们将它们简化得如此之多,以至于他们尝试使用回调和复杂的结果检查,许多成年人(可能还有一些 child )
如果一个解决方案需要链接,等待一个或多个过程的结果来解决,或者这些过程的任意组合,Deferred/Promises 会让您免于沮丧和痛苦,并且对任何继承您代码的人都会这样做。
现在出去用可怕的虐待来证明我错了。不,真的,不要那样做。编写简洁、可维护的代码。
免责声明:在您的代码中使用 Deferred/Promises 可能不会让您感觉“在船上”,但感觉比用回调做成的汤要好得多
关于javascript - jQuery Deferred/Promise 设计模式和用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12160785/
我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
鉴于我有以下迁移:Sequel.migrationdoupdoalter_table:usersdoadd_column:is_admin,:default=>falseend#SequelrunsaDESCRIBEtablestatement,whenthemodelisloaded.#Atthispoint,itdoesnotknowthatusershaveais_adminflag.#Soitfails.@user=User.find(:email=>"admin@fancy-startup.example")@user.is_admin=true@user.save!ende
我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数
给定一个复杂的对象层次结构,幸运的是它不包含循环引用,我如何实现支持各种格式的序列化?我不是来讨论实际实现的。相反,我正在寻找可能会派上用场的设计模式提示。更准确地说:我正在使用Ruby,我想解析XML和JSON数据以构建复杂的对象层次结构。此外,应该可以将该层次结构序列化为JSON、XML和可能的HTML。我可以为此使用Builder模式吗?在任何提到的情况下,我都有某种结构化数据-无论是在内存中还是文本中-我想用它来构建其他东西。我认为将序列化逻辑与实际业务逻辑分开会很好,这样我以后就可以轻松支持多种XML格式。 最佳答案 我最
目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称
项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU
了解Rails缓存如何工作的人可以真正帮助我。这是嵌套在Rails::Initializer.runblock中的代码:config.after_initializedoSomeClass.const_set'SOME_CONST','SOME_VAL'end现在,如果我运行script/server并发出请求,一切都很好。然而,在我的Rails应用程序的第二个请求中,一切都因单元化常量错误而变得糟糕。在生产模式下,我可以成功发出第二个请求,这意味着常量仍然存在。我已通过将以上内容更改为以下内容来解决问题:config.after_initializedorequire'some_cl
我在我的项目中有一个用户和一个管理员角色。我使用Devise创建了身份验证。在我的管理员角色中,我没有任何确认。在我的用户模型中,我有以下内容:devise:database_authenticatable,:confirmable,:recoverable,:rememberable,:trackable,:validatable,:timeoutable,:registerable#Setupaccessible(orprotected)attributesforyourmodelattr_accessible:email,:username,:prename,:surname,:
我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的