我想知道JS承诺是否属于es5的一部分?如果是这样,为什么它有时在旧版浏览器中不起作用,我们必须添加一个polyfill。另外,在这种情况下应该添加哪种polyfill,es5 one或es6?我对此有点疑惑。
答案 0 :(得分:34)
ES5没有承诺。像jQuery或Angular这样的库有自己的自定义和非标准的promise实现。
与ES5一起使用的流行Promise实现是Bluebird(与ES6标准兼容)和Q(最初与ES6标准不兼容 - 尽管似乎正朝着这个方向发展)和RSVP。
实际的polyfills也不是因为他们添加了额外的功能,如果存在本机承诺,他们就不会放弃。
ES6承诺有一些纯的polyfill。这是RSVP的一个子集:https://github.com/stefanpenner/es6-promise。
有理由使用多个填充物,您可以在此处阅读:Are there still reasons to use promise libraries like Q or BlueBird now that we have ES6 promises?
在Stack溢出时,要求推荐特定的polyfill库被认为是偏离主题的,所以我不会对此发表评论。