Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   Promise polyfill (https://javascript.ru/forum/project/46096-promise-polyfill.html)

monolithed 09.05.2014 18:31

Цитата:

Сообщение от Octane
это же придется подменять defineProperty для IE8…

Кому нужно подключают полифил для ES5 :)

Цитата:

Сообщение от Octane
как баг исправлю.

Сколько бы я не видел реализаций промисов, только в $.Deferred нет этого бага.

Octane 09.05.2014 19:15

у меня тоже не было этого бага, пока не добавил параметр _defer, чтобы resolver при создании promise сразу запускался, а не при первом вызове then:

вся логика в then, только он запускает resolver, чтобы обойтись малой кровью, добавил параметр _defer
function Promise(resolver, _defer) {
    ...
    return _defer ? this ? this.then();
}
Promise.prototype.then = function () {
    ...
    resolver(...)
    ...
    return new Promise(..., _defer = true);
};
но теперь всплыл этот баг.

Maxmaxmaximus100 09.05.2014 20:37

неужели промисы так сложно реализуются О_О
у меня промисы получались в 50 строк кода со всеми плюшками.

сделать?

Octane 09.05.2014 21:00

Конечно сделай :)


Что-то у меня голова сегодня не варит ничего исправлять, запилил пока что установку:

Bower
bower install promises

npm
npm install es6-promises

используем модуль
var Promise = require('es6-promises').Promise;



------------
а readme тут https://www.npmjs.org/package/es6-promises само обновится со временем или надо пепубликовать?

monolithed 09.05.2014 22:31

Цитата:

Сообщение от Octane
var Promise = require('es6-promises').Promise;

А почему так? ;)

Цитата:

Сообщение от Octane
а readme тут https://www.npmjs.org/package/es6-promises само обновится со временем или надо пепубликовать?

Само, но лучше добавь таск в Grunt чтобы публикация в npm происходила автоматически серез Travis CI (если все тесты Ок).

Octane 09.05.2014 22:34

а как должно быть?)

npm же всегда папку создает, просто promise уже занято конечно, пришлось так назвать

monolithed 09.05.2014 23:58

Цитата:

Сообщение от Octane
а как должно быть?)

var Promise = require('es6-promises');

PS: глянь как у меня релиз публикуется :)

Octane 10.05.2014 07:02

ага, спасибо, разобрался, теперь работает так.
ошибку с settled promise тоже исправил

monolithed 10.05.2014 09:58

setImmediate = (global.window || global).setImmediate,

Почему не написать посто global.setImmediate?

monolithed 10.05.2014 14:15

А что у тебя с версионностью?

Добавь release таск, он автоматически будет менять циферки и публиковать в npm.

Сейчас получается, что ты изменения внес, а npm их нет! ;)


Часовой пояс GMT +3, время: 14:21.