Javascript承诺vs jQuery延迟

Javascript承诺vs jQuery延迟,javascript,jquery,promise,jquery-deferred,Javascript,Jquery,Promise,Jquery Deferred,Javascript承诺与jQuery延迟对象的优缺点是什么 例如,他们各自有哪些问题(如果有的话) 一位同事说: “……真实的承诺是真实的,虚假的承诺是虚假的。” 他这是什么意思?JavaScript承诺更好,因为它符合标准。总有一天,它们将在所有浏览器上以本机方式提供。现在,您可以使用类似babel的东西来使用ES6承诺:。没有“真正的承诺”或“虚假的承诺”这样的东西。有遵循当前标准的承诺实施,也有不遵循当前标准的承诺实施。承诺没有“真实”或“虚假”的固有属性。它们是实现标准行为的Javas

Javascript承诺与jQuery延迟对象的优缺点是什么

例如,他们各自有哪些问题(如果有的话)

一位同事说:

“……真实的承诺是真实的,虚假的承诺是虚假的。”


他这是什么意思?

JavaScript承诺更好,因为它符合标准。总有一天,它们将在所有浏览器上以本机方式提供。现在,您可以使用类似babel的东西来使用ES6承诺:。

没有“真正的承诺”或“虚假的承诺”这样的东西。有遵循当前标准的承诺实施,也有不遵循当前标准的承诺实施。承诺没有“真实”或“虚假”的固有属性。它们是实现标准行为的Javascript片段

严格遵循标准的任何promise实现都应该易于使用,并且应该可以与其他标准promise实现进行互操作。大多数人会认为互操作性和遵守公认标准是一个有用的特性。 现在,jQuery承诺没有遵循承诺标准,这就是有些人对jQuery承诺说不好的地方。他们显然正在努力使jQuery的未来版本更加标准化,但目前他们在许多方面偏离了标准。这导致了使用jQuery承诺时与使用标准承诺时必须采用不同的编码方式的问题。因此jQuery承诺代码看起来与ES6承诺代码不同

jQuery承诺中的问题

有关当前jQuery承诺的问题列表,请参阅。两个主要问题是被拒绝承诺中的错误处理问题和执行顺序不一致的问题。然后()回调会导致不可预测或不一致的代码执行。所有
.then()
处理程序都应该异步执行(在当前JS线程展开之后)。jQuery承诺并不总是这样做,它可能会在某些类型的代码中导致问题

浏览器中本机承诺的状态


本机承诺在浏览器中是一个新事物,因此现在还不能仅仅依赖于一个事实,即所有可能访问您站点的浏览器都必须内置本机承诺。从Safari 7.1、Firefox 29、Chrome 32、Edge、Android 4.4.4、IOS 8.4开始,原生承诺已内置到浏览器中,但IE尚未提供(截至2015年9月)。因此,您仍然需要一个相当新的浏览器才能获得本机promise支持。因此,有许多优秀的promise库可以提供polyfill或full-on替换,从而使您的代码能够在任何浏览器中使用promises,而与本机promises相比,这一点毫无妥协。

有些人可能是正确的,但这不是解决争论的好方法。有人搞错了,纯粹是因为IE不支持javascript承诺,而且它还不成熟。在未来,他会是对的。@Pointy,lol,嗯,我正在寻找一个合理的答案(不是试图辩论这个)。如果他是对的,我想知道原因,而不是依赖于他神秘的反应。@Saar你是对的,原生承诺没有得到普遍支持,但原生承诺的工作方式与jQuery承诺/延迟承诺的工作方式有重要区别。请看,然后是很多。我希望这包括一些关于javascript承诺在大多数浏览器中是如何原生的评论,包括微软的新Edge,但是,旧浏览器兼容性(IE)总是会有问题。除此之外,我认为这是对我的问题的很好的回答。@picokol-我对浏览器中本机承诺的状态添加了一条评论。微任务如何?@SavaScript-微任务如何?