Короче магическим образом заставил IE8 работать: переименовал параметры функции и параметр в try-catch, так чтобы они не совпадали. Повторить баг не получилось, но reason не понятно когда становился undefined :D
function (reason) { … try { … } catch (*!*reason*/!*) { … } … } вторая причина тут http://javascript.ru/forum/misc/4588...-funkcijj.html |
Накопилось много вопросов. Мужайся :)
1. Закончен ли полифил? (ие8 меня не интересует) 2. Покрыт ли он тестами? 3. Будет ли выложен на гитхаб? 4. Планируется ли адаптация (setImmediate -> nextTick, ...) под node.js? |
Цитата:
Цитата:
Цитата:
Цитата:
var setImmediate = process.nextTick; ну и там всякие Object.assign и Array generic methods npm установщик никогда не делал, надо будет разбираться -------------------------------- хм Цитата:
а тут http://esdiscuss.org/topic/promise-c...romise-resolve вроде спорят, что это разные методы были ------------------ чорт баг нашел: resolver только один раз может выполнится, то есть реюз обещания не возможен, но при этом then'ы все должны выполнятся, даже если promise уже settled |
Цитата:
А ваще: https://github.com/NobleJS/setImmediate |
О точно есть, забыл, что в node-webkit его из global надо вытаскивать, когда проверял
|
Короче у меня уже promise мозга :D
Чтобы сделать обещания одноразовыми, почти все заново переписал… |
Цитата:
|
Octane, сейчас пытаюсь установить твой promise-polyfill и понимаю, что это не так просто сделать :)
Ситуация такая: я использую es5-shim, т.е. es5 у меня можно сказать есть. Для того, чтобы твой полифил запустился, мне необходимо еще установить: Object.assign Array.slice Array.forEach Array.every window.setImmediate Можно это дело отразить хотя бы в комментариях к полифилу? А то получается, каждый разработчик, кот. захочет воспользоваться твоим promise-полифилом, обязан прочитать код и проверить его на наличие es6 фич в том случае, если он не использует все твои полифилы. И идеале, было бы хорошо ссылок набросать на required для es3 и es5 для данного полифила. Лично я бы выкинул из реализации Object.assign, т.к. без него можно обойтись. Иными словами, ты заставляешь меня тянуть Object.assign :) А также Array.slice Array.forEach Array.every несмотря на то, что es5 у меня есть. |
Как?! как можно жить без
Object.assign ?! :D Да, вечером оформлю.Пока что вот ссылки на гитхаб: Object.assign //using Object.keys: goo.gl/0QNMDz //several sources: twitter.com/rwaldron/status/454114058640183296 //people.mozilla.org/~jorendorff/es6-draft.html#sec-object.assign if (!Object.assign) { Object.assign = function (target) { Array.prototype.slice.call(arguments, 1).forEach(function (source) { Object.keys(source).forEach(function (key) { target[key] = source[key]; }); }); return target; }; } Array generics //Array generic methods new function () { function fastApply(method, args) { var target = args[0]; switch (args.length) { case 1: return method.call(target); case 2: return method.call(target, args[1]); case 3: return method.call(target, args[1], args[2]); } return method.apply(target, Array.prototype.slice.call(args, 1)); } function createGeneric(method) { return function () { return fastApply(method, arguments); }; } function createGenerics(source, names) { return names.reduce(function (methods, name) { methods[name] = createGeneric(source[name]); return methods; }, {}); } function implement(object, methods) { Object.keys(methods).forEach(function (name) { if (!(name in object)) { object[name] = methods[name]; } }); } implement(Array, createGenerics(Array.prototype, [ 'concat', 'every', 'fill', 'filter', 'find', 'findIndex', 'forEach', 'indexOf', 'join', 'lastIndexOf', 'map', 'pop', 'push', 'reduce', 'reduceRight', 'reverse', 'shift', 'slice', 'some', 'sort', 'splice', 'unshift' ])); }; setImmediate IE9+ window.setImmediate || Object.assign(window, window.msSetImmediate ? { //IE10 setImmediate: window.msSetImmediate, clearImmediate: window.msClearImmediate } : new function () { var id = 0, storage = {}, firstCall = true, message = 'setImmediatePolyfillMessage'; function fastApply(args) { var func = args[0]; switch (args.length) { case 1: return func(); case 2: return func(args[1]); case 3: return func(args[1], args[2]); } return func.apply(window, Array.prototype.slice.call(args, 1)); } function callback(event) { var data, key = event.data; if ('string' == typeof key && key.startsWith(message)) { data = storage[key]; if (data) { fastApply(data); delete storage[key]; } } } return { setImmediate: function () { var key = message + ++id; storage[key] = arguments; if (firstCall) { firstCall = false; window.addEventListener('message', callback); } window.postMessage(key, '*'); return id; }, clearImmediate: function (id) { delete storage[message + id]; } }; }); сам Promise polyfill правда я там в последней версии дописал window. перед setImmediate , потому что 'setImmediate' in Window.prototype → true , не знаю, может зря так сделал, если кто в Nodejs захочет подключить, работать не будет, хотя для ноды и так миллион полифилов есть… сделать через global ?---------- Наверное отдельный самодостаточный репозиторий на гитхабе сделаю |
Я еще немного покритиХую :)
--- На мой взгляд, ты заставляешь тянуть es6 код в проект. Не каждому проекту он нужен. Поэтому, как мне кажется, логичным было бы сделать возможность его не тянуть. Например, в виде версий для es5 и es6. По поводу ноды - я за универсальность (по возможности). Допустим, есть миллион полифилов, но я работаю с твоим на клиенте. Я уже знаю, что он фуричит, проверен. Почему бы не использовать его и на сервере? |
Часовой пояс GMT +3, время: 13:14. |