Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 30.03.2014, 05:17
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Короче магическим образом заставил IE8 работать: переименовал параметры функции и параметр в try-catch, так чтобы они не совпадали. Повторить баг не получилось, но reason не понятно когда становился undefined
function (reason) {

	…

	try {

		…

	}
	catch (*!*reason*/!*) {

		…

	}

	…
 
}


вторая причина тут Асинхронный вызов функций

Последний раз редактировалось Octane, 30.03.2014 в 05:23.
Ответить с цитированием
  #12 (permalink)  
Старый 01.04.2014, 00:58
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Накопилось много вопросов. Мужайся

1. Закончен ли полифил? (ие8 меня не интересует)
2. Покрыт ли он тестами?
3. Будет ли выложен на гитхаб?
4. Планируется ли адаптация (setImmediate -> nextTick, ...) под node.js?
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #13 (permalink)  
Старый 01.04.2014, 01:44
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 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.
Ответить с цитированием
  #14 (permalink)  
Старый 01.04.2014, 09:13
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Цитата:
Планируется ли адаптация (setImmediate -> nextTick, ...) под node.js?
Дык в ноде из коробки setImmediate есть же уже давно.
А ваще: https://github.com/NobleJS/setImmediate
__________________
kobezzza
code monkey
Ответить с цитированием
  #15 (permalink)  
Старый 01.04.2014, 09:52
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

О точно есть, забыл, что в node-webkit его из global надо вытаскивать, когда проверял
Ответить с цитированием
  #16 (permalink)  
Старый 02.04.2014, 02:59
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Короче у меня уже promise мозга

Чтобы сделать обещания одноразовыми, почти все заново переписал…
Ответить с цитированием
  #17 (permalink)  
Старый 03.04.2014, 14:52
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от Octane
Короче у меня уже promise мозга
А ты как думал, лезть в обещания
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #18 (permalink)  
Старый 08.05.2014, 14:51
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 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.
Ответить с цитированием
  #19 (permalink)  
Старый 08.05.2014, 15:14
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 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.
Ответить с цитированием
  #20 (permalink)  
Старый 08.05.2014, 15:37
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Я еще немного покритиХую

---

На мой взгляд, ты заставляешь тянуть es6 код в проект. Не каждому проекту он нужен. Поэтому, как мне кажется, логичным было бы сделать возможность его не тянуть. Например, в виде версий для es5 и es6.

По поводу ноды - я за универсальность (по возможности). Допустим, есть миллион полифилов, но я работаю с твоим на клиенте. Я уже знаю, что он фуричит, проверен. Почему бы не использовать его и на сервере?
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Баг Aurora promise catch Octane Оффтопик 2 28.03.2014 01:37
последовательность вызовов без promise virus-07 Общие вопросы Javascript 0 17.10.2013 10:27
работа с promise vy4eslavik AJAX и COMET 1 28.02.2013 21:55