ES5 与 ES6 承诺

ES5 vs ES6 Promises

我想知道 JS promises 是否是 ES5 的一部分?如果是这样,为什么它有时在旧浏览器中不起作用,我们必须为它们添加一个 polyfill。另外,在这种情况下应该添加哪个 polyfill,ES5 还是 ES6?我对此有点困惑。

ES5 没有承诺。 jQuery 或 Angular 等库有自己的自定义和非标准承诺实现。

与 ES5 一起使用的流行 Promise 实现是 Bluebird(与 ES6 标准兼容)和 Q(最初与 ES6 标准不兼容 - 尽管似乎正在朝着那个方向发展)和 RSVP。

实际的 polyfill 也不是,因为如果存在原生 promise,它们不会让路,因为它们添加了额外的功能。

ES6 promise 有一些纯 polyfill。这是 RSVP 的子集:https://github.com/stefanpenner/es6-promise.

使用多于一个 polyfill 的原因你可以在这里阅读:

在 Stack overflow 上要求推荐特定的 polyfill 库被认为是题外话,所以我不会对此发表评论。