jQuery的延期和承诺是什么设计模式?



看来,jQuery的延期实际上可以处理延迟的对象和承诺对象可以做的所有方法,但是它只会将承诺对象返回给用户,以便给出一个子集的子集,以便用户无法解析或拒绝 - 对于用户不应该做的事情。

如此递延实际上很清楚,就像一堂课一样。可能令人困惑的是另一个阶级的承诺,它使事情看起来更加复杂,因为现在有两个类别的类别,似乎令人困惑。

我想知道

  1. 上述准确吗?
  2. 是它自己的设计模式,还是实际上类似于其他具有这种"许多方法"的经典设计模式(延期),但"仅限于它的子集以授予给予用户班级"(承诺)的设计模式?

jQuery的承诺在先前的艺术中得到了部分告知,包括Q Promises,Dojo,Dojo和Twisted Python延期,这反过来又受到E的承诺的启发。是基于对象能力编程(OCAP)设计原理的单独对象。在Q中,promiseresolve是单独的具有功能的对象,而"递延"只是这些功能的容器。在ES6 Promise设计中,延期存在,但在界面中不存在以消除混乱 - 正式,Promise构造函数将resolve作为参数发送的回调。

e设计用于以对象为导向的安全性和在多个过程中代理的鲁棒组成。承诺是确保E所有目标的重要原始性。对象能力范式是访问控制列表范式的替代方法。功能分解为单个对象,而不是面向用户的当局。授予权限就像让代理商访问具有能力的对象一样简单,而OCAP取决于拥有一个环境,可以保证只能通过与其他对象进行明确和故意互动来获得功能。对于使用弱地图创建的对象膜也可以撤销权威(以确保内存不会泄漏)和代理(创建跨膜引用始终包装的边界,以后可以折断)。

观察和通知是单独的功能。有可能使某些代理商有权观察诺言的解决,并使其他代理商能够解决诺言。在安全系统中,通信通道是单向的,这一点很重要。一个解析器可以向所有观察者传达一个值,但是没有观察者或解析器不应能够干扰任何其他代理的不变性。

承诺是Gamma等人观察者模式或发布者订户模式的变体。值得注意的其他约束。诺言是广播出版商。可以通知多个观察者。承诺还可以确保解决或拒绝的一项决议。与PubSub不同,诺言将告知观察者,无论它是在派发一项决议之前还是之后开始观察的。与活动发射器不同,承诺保证异步。事件发射器通常是同步的,无论是在dom和node.js中。

出于鲁棒构图的目的安全性,保证将在单独的事件中调用所有处理程序。这样可以防止函数可以干扰共享相同呼叫堆栈的其他实体的多种方式,例如在函数返回之前不一定设置的状态下关闭的呼叫函数,或检查自己的堆栈以推断其他代理正在做。

大多数JavaScript环境不足以满足承诺设计的安全保证。Google Caja和Drs是创建此类环境的项目。但是,Q的承诺旨在与原始设计兼容,以便为Q用户编写的代码更容易移植到此类环境中。出于同样的原因,Q与其他JavaScript Promise库不同,也基于e的承诺,基于传递"内核"的诺言,该消息允许它们用于在其他过程中将消息发送给对象,从用作将进一步消息传为结果的代理。

  • http://en.wikipedia.org/wiki/object-capibalie_model
  • http://erights.org/elib/capability/ode/ode-capabilities.html

jQuery采取了承诺,但仅部分赞赏先前的艺术。jQuery中的承诺围绕着jQuery自己的事件调度模式进行了重新评估,默认情况下具有多个输入和输出,这打破了诺言对应于函数调用结果的类比,即返回值或投掷异常。JQuery承诺也不捕获异常,因此,如果应告知观察者失败,则有必要明确创建"拒绝"。这使得某些代理商不可能从某些错误中恢复。JQUERY还决定跟随Dojo并将其混合在一起,将承诺和解析器混合成一个对象,该对象旨在使界面更易于使用。JQuery承诺最初并没有为已满或被拒绝的处理人员的返回价值创造新的承诺,但后来纠正了这个错误。

上述准确?

是。您可以说jQuery.Deferred是jQuery Promise的子类。

它是自己的设计模式

可能,但选择了一个。延期和承诺的工作应该是两个单独的接口 - 您 at 具有可以解决事物的对象,您拥有可以解决的对象(您可以观察到)。递延甚至可以看作是承诺的建筑商。

    正如您所说,
  1. 承诺揭露了递延界面的子集。承诺应该用于附加成功/失败/进度事件。

  2. 是的,延期/承诺是其本身的设计模式。实际上非常重要。

最新更新