本文概述
- 5. ES6 Promise Polyfill
- 4. Promise Polyfill
- 3. BluebirdJS
- 2. Native Promise
- 1. ES-6 Promise(rsvp.js的子集)
polyfill(或称polyfiller)是一段代码(或插件), 提供开发人员希望浏览器本机提供的技术。如果可以的话, 请展平API景观。
Polyfill的想法是在过时的浏览器中为Promise API提供支持, 但使用相同的编码流程:
var prom = new Promise(function(resolve, reject) {
// do a thing, possibly async, then…
if (/* everything turned out fine */) {
resolve("Stuff worked!");
} else {
reject(new Error("It broke"));
}
});
// For IE +10
prom.then(function(result) {
// Do something when async done
}).catch(function(err){
// Rejected
});
// Or for IE-9, where catch is a reserved keyword
// For IE +10
prom.then(function(result) {
// Do something when async done
}, function(err){
// Rejected
});
使用以下任何Polyfills, 你都可以像使用新浏览器一样在任何旧的Web浏览器中使用Promise API。
享受我们的5种最佳Promise API最佳Polyfill集合。
5. ES6 Promise Polyfill
这是ES6 Promise的polyfill。基于Jake Archibald的实现是rsvp.js的子集。如果你需要其他功能和更多调试选项, 请查看完整的库。
该库的主要目标是实现Javascript Promises, 该Javascript Promises与浏览器的实现一致, 并且尺寸要尽可能小。因此, 它完全是ES6 Promise规范的polyfill, 仅此而已。它通过了Promises / A +测试套件和rsvp.js测试套件。最小为2, 6KB分钟(或1KB分钟+ gzip)。
4. Promise Polyfill
用于浏览器和节点的轻量级ES6 Promise polyfill。严格遵守规范。它是完美的polyfill IE, Firefox或任何其他不支持本地承诺的浏览器。从IE8 +, Chrome, Firefox, IOS 4 +, Safari 5 +, Opera开始, 此实现为浏览器提供支持。
默认情况下, promise-polyfill使用setImmediate, 但回退到setTimeout以异步执行。如果浏览器不支持setImmediate(IE / Edge是唯一具有setImmediate的浏览器), 则可能会出现性能问题。使用setImmediate polyfill可以解决此问题。 setAsap或setImmediate可以很好地工作。
如果你polyfill window.setImmediate或使用Promise._immediateFn = yourImmediateFn, 它将代替window.setTimeout使用
3. BluebirdJS
蓝鸟是功能齐全的承诺库, 专注于创新功能和性能。 BluebirdJS允许你创建新的承诺。传入的函数将接收resolve和拒绝函数作为其参数, 可以调用这些函数来密封创建的promise的命运。
为确保返回承诺的函数遵循了隐含但至关重要的承诺契约, 如果无法立即启动链, 则可以使用新的Promise启动函数。
2. Native Promise
Native Promise仅是本机ES6 Promises的polyfill, 它尽可能接近(不扩展)严格的规范定义。该项目的目标是成为Promises的最小的Polyfill, 并尽可能接近Promises / A +和即将发布的ES6规范中指定的内容。
同样重要的目标是避免暴露对承诺状态进行外部更改的任何功能。已知限制部分说明了该余额的权衡。来自此polyfill的Promise对象将是Promise构造函数的一个实例, 这使真正的Promise的识别更加容易。
1. ES-6 Promise(rsvp.js的子集)
这是EcmaScript6 Promise的polyfill。该实现是@jakearchibald提取的rsvp.js的子集, 如果你需要其他功能和更多调试选项, 请查看完整的库。
catch是IE <9中的保留字, 表示promise.catch(func)会引发语法错误。要解决此问题, 你可以使用字符串访问属性, 如以下示例所示。
但是, 请记住, 大多数常见的缩小器已经提供了这种技术, 从而使生成的代码对于旧的浏览器和生产环境而言是安全的:
promise['catch'](function(err) {
// ...
});
如果你知道另一个很棒的Promises polyfill, 请在评论框中与社区分享。编码愉快!
评论前必须登录!
注册