30.03.2014, 05:17
|
|
|
Регистрация: 10.07.2008
Сообщений: 3,873
|
|
Короче магическим образом заставил IE8 работать: переименовал параметры функции и параметр в try-catch, так чтобы они не совпадали. Повторить баг не получилось, но reason не понятно когда становился undefined
function (reason) {
…
try {
…
}
catch (*!*reason*/!*) {
…
}
…
}
вторая причина тут Асинхронный вызов функций
Последний раз редактировалось Octane, 30.03.2014 в 05:23.
|
|
01.04.2014, 00:58
|
|
junior
|
|
Регистрация: 29.11.2011
Сообщений: 3,924
|
|
Накопилось много вопросов. Мужайся
1. Закончен ли полифил? (ие8 меня не интересует)
2. Покрыт ли он тестами?
3. Будет ли выложен на гитхаб?
4. Планируется ли адаптация (setImmediate -> nextTick, ...) под node.js?
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
|
|
01.04.2014, 01:44
|
|
|
Регистрация: 10.07.2008
Сообщений: 3,873
|
|
Сообщение от nerv_
|
1. Закончен ли полифил? (ие8 меня не интересует)
|
Кроме метода cast и thenable value, остальное реализовано, поведение как в Aurora 29 и Chrome 35 (resolver синхронный, resolve и reject асинхронные). Метода cast нет ни в Aurora, ни в Chrome, а последний еще и не умеет промисы делать из объектов с методом then, так что не знаю, стоит ли пытаться дополнять нативную реализацию?
Сообщение от nerv_
|
2. Покрыт ли он тестами?
|
я слишком ленивый надо будет с чужого полифила тесты забрать)
Сообщение от nerv_
|
3. Будет ли выложен на гитхаб?
|
https://github.com/Octane/jsCore/blo...ill/promise.js
Сообщение от nerv_
|
4. Планируется ли адаптация (setImmediate -> nextTick, ...) под node.js?
|
достаточно:
var setImmediate = process.nextTick;
ну и там всякие Object.assign и Array generic methods
npm установщик никогда не делал, надо будет разбираться
--------------------------------
хм
Цитата:
|
Promise.cast is renamed to Promise.resolve
|
https://mail.mozilla.org/pipermail/e...ry/036194.html
а тут http://esdiscuss.org/topic/promise-c...romise-resolve вроде спорят, что это разные методы были
------------------
чорт баг нашел: resolver только один раз может выполнится, то есть реюз обещания не возможен, но при этом then'ы все должны выполнятся, даже если promise уже settled
Последний раз редактировалось Octane, 01.04.2014 в 07:33.
|
|
01.04.2014, 09:13
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
Цитата:
|
Планируется ли адаптация (setImmediate -> nextTick, ...) под node.js?
|
Дык в ноде из коробки setImmediate есть же уже давно.
А ваще: https://github.com/NobleJS/setImmediate
|
|
01.04.2014, 09:52
|
|
|
Регистрация: 10.07.2008
Сообщений: 3,873
|
|
О точно есть, забыл, что в node-webkit его из global надо вытаскивать, когда проверял
|
|
02.04.2014, 02:59
|
|
|
Регистрация: 10.07.2008
Сообщений: 3,873
|
|
Короче у меня уже promise мозга
Чтобы сделать обещания одноразовыми, почти все заново переписал…
|
|
03.04.2014, 14:52
|
|
junior
|
|
Регистрация: 29.11.2011
Сообщений: 3,924
|
|
Сообщение от Octane
|
Короче у меня уже promise мозга
|
А ты как думал, лезть в обещания
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
|
|
08.05.2014, 14:51
|
|
junior
|
|
Регистрация: 29.11.2011
Сообщений: 3,924
|
|
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 у меня есть.
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Последний раз редактировалось nerv_, 08.05.2014 в 14:55.
|
|
08.05.2014, 15:14
|
|
|
Регистрация: 10.07.2008
Сообщений: 3,873
|
|
Как?! как можно жить без Object.assign ?! Да, вечером оформлю.
Пока что вот ссылки на гитхаб:
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 ?
----------
Наверное отдельный самодостаточный репозиторий на гитхабе сделаю
Последний раз редактировалось Octane, 08.05.2014 в 15:17.
|
|
08.05.2014, 15:37
|
|
junior
|
|
Регистрация: 29.11.2011
Сообщений: 3,924
|
|
Я еще немного покритиХую
---
На мой взгляд, ты заставляешь тянуть es6 код в проект. Не каждому проекту он нужен. Поэтому, как мне кажется, логичным было бы сделать возможность его не тянуть. Например, в виде версий для es5 и es6.
По поводу ноды - я за универсальность (по возможности). Допустим, есть миллион полифилов, но я работаю с твоим на клиенте. Я уже знаю, что он фуричит, проверен. Почему бы не использовать его и на сервере?
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
|
|
|
|