个性化阅读
专注于IT技术分析

5个最佳Javascript承诺Polyfills

本文概述

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, 请在评论框中与社区分享。编码愉快!

赞(0)
未经允许不得转载:srcmini » 5个最佳Javascript承诺Polyfills

评论 抢沙发

评论前必须登录!