| 
		
			Сообщение от kobezzza
			
		
	 | 
	| 
		Банк полифилов
	 | 
	
Полифил для промисов там вообще неправильный
	
	| 
		
			Сообщение от jonathantneal/polyfill
			
		
	 | 
	
		
(function () {
	function Promise(resolver) {
		var
		self = this,
		then = self.then = function () {
			return Promise.prototype.then.apply(self, arguments);
		};
		then.fulfilled = [];
		then.rejected = [];
		function timeout(state, object) {
			then.state = 'pending';
			if (then[state].length) setTimeout(function () {
				timeout(state, then.value = then[state].shift().call(self, object));
			}, 0);
			else then.state = state;
		}
		then.fulfill = function (object) {
			timeout('fulfilled', object);
		};
		then.reject = function (object) {
			timeout('rejected', object);
		};
		resolver.call(self, then.fulfill, then.reject);
		return self;
	}
	Promise.prototype = {
		'constructor': Promise,
		'then': function (onFulfilled, onRejected) {
			if (onFulfilled) this.then.fulfilled.push(onFulfilled);
			if (onRejected) this.then.rejected.push(onRejected);
			if (this.then.state === 'fulfilled') this.then.fulfill(this.then.value);
			return this;
		},
		'catch': function (onRejected) {
			if (onRejected) this.then.rejected.push(onRejected);
			return this;
		}
	};
	Promise.all = function () {
		var
		args = Array.prototype.slice.call(arguments),
		countdown = args.length;
		function process(promise, fulfill, reject) {
			promise.then(function onfulfilled(value) {
				if (promise.then.fulfilled.length > 1) promise.then(onfulfilled);
				else if (!--countdown) fulfill(value);
				return value;
			}, function (value) {
				reject(value);
			});
		}
		return new Promise(function (fulfill, reject) {
			while (args.length) process(args.shift(), fulfill, reject);
		});
	};
	window.Promise = Promise;
})();
	 | 
	
1. then должен возвращать новое обещание
2. нет методов race, reject, resolve
3. из-за использования setTimeout будут лишние задержки по 3-5мс и длительные в бэкграунде
4. возвращенный из then инстанс промиса в качестве value никак не обрабатывается
5. thenable value не поддерживается
6. ...
----
по другим полифилам:
Object.create не фиксит баг в IE9-11 
http://webreflection.blogspot.ru/201...re-broken.html.
Заявлена поддержка IE6+, но Object.keys не фиксит баг со стандартными не enumerable свойствами.
DOMTokenList вынесен в отдельный конструктор, но привязан к className, тоесть не имеет смысла вне classList polyfill.
Примитивная реализация Function.prototype.bind, будет неправильно работать с конструкторами.
Element.prototype.matches выдаст неправильный результат, если элемент не находится в DOM-дереве.
getComputedStyle что-то там пытается привести к общему виду в единицах измерения, но одно из самого нужного - opacity никак не фиксит.
Полифилами для Array iteration methods вообще лучше не пользоваться, они проходят по несуществующим свойствам в отличие от стандартных.
----------
Моя подборка полифилов будет получше 
https://github.com/Octane/jsCore#polyfill