Содержание
Polyfill, или polyfiller, представляет собой фрагмент кода (или плагин), который предоставляет технологию, которую вы, разработчик, ожидаете, что браузер предоставит изначально. Сглаживание ландшафта API, если хотите.
Идея Polyfill состоит в том, чтобы обеспечить поддержку API Promise в устаревших браузерах, но используя тот же поток кодирования:
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 вы сможете использовать API Promise в любом старом веб-браузере так же, как и в новых браузерах.
Наслаждайтесь нашей коллекцией из 5 лучших Polyfill для Promise API в Javascript.
5. ES6 Promise Polyfill
Это заполнение ES6 Promise. Реализация на основе Реализация Джейка Арчибальда подмножество rsvp.js. Если вам нужны дополнительные функции и дополнительные параметры отладки, проверьте полная библиотека.
Основной целью этой библиотеки является реализация обещаний Javascript, которые соответствуют реализациям браузера и имеют минимально возможный размер. Так что это строго полифилл спецификации ES6 Promise и ничего более. Проходит оба Обещания / A + тестовый набор а также тестовый набор rsvp.js. И всего 2,6KB min (или 1KB min + gzip).
4. Обещание Полифилла
Облегченный ESF Promise polyfill для браузера и узла. Придерживается близко к спецификации. Это идеальный полифилл IE, Firefox или любой другой браузер, который не поддерживает обещания. Эта реализация обеспечивает поддержку браузеров начиная с IE8 +, Chrome, Firefox, IOS 4+, Safari 5+, Opera.
По умолчанию обещание-polyfill использует setImmediate
, но возвращается к setTimeout
для выполнения асинхронно. Если браузер не поддерживает setImmediate
(IE / Edge являются единственными браузерами с setImmediate), вы можете увидеть проблемы с производительностью. Использовать setImmediate
Polyfill, чтобы исправить эту проблему. setAsap или же setImmediate хорошо работать.
Если вы заполняете window.setImmediate
или использовать Promise._immediateFn = yourImmediateFn
будет использоваться вместо window.setTimeout
3. BluebirdJS
Bluebird — это полнофункциональная библиотека обещаний с акцентом на инновационные функции и производительность. BluebirdJS позволяет вам создать новое обещание. Переданная функция получит функции разрешения и отклонения в качестве своих аргументов, которые могут быть вызваны для определения судьбы созданного обещания.
Чтобы функция, возвращающая обещание, следовала неявному, но критически важному договору обещаний, вы можете запустить функцию с новым обещанием, если не можете сразу запустить цепочку.
2. Только родные обещания
Только Native Promise — это полизаполнение для собственных обещаний ES6, максимально приближенное (без расширений) к определениям строгой спецификации. Цель этого проекта — стать наименьшим полифиллом для Обещаний, максимально приближенным к тому, что указано в Обещания / А + и будущая спецификация ES6.
Не менее важная цель состоит в том, чтобы не подвергать какой-либо способности изменению состояния обещания извне. Известные ограничения раздел объясняет компромиссы этого баланса. Объект обещания из этого полифилла будет экземпляром конструктора Promise, который облегчает идентификацию подлинных обещаний.
1. ES-6 Promise (подмножество rsvp.js)
Это заполнение обещания EcmaScript6. Реализация является подмножеством rsvp.js Извлеченный @jakearchibald, если вам нужны дополнительные функции и дополнительные параметры отладки, ознакомьтесь с полной библиотекой.
catch
это зарезервированное слово в IE<9, meaning
Однако, пожалуйста, помните, что такая методика уже предусмотрена большинством распространенных минификаторов, что делает полученный код безопасным для старых браузеров и для производства:
promise['catch'](function(err) {
// ...
});
Если вы знаете еще один замечательный полифилл Promises, поделитесь им с сообществом в поле для комментариев. Удачного кодирования!